我想更新数据框中第一个副本(相对于标识符变量)的条目,其中包含来自最后一个副本的信息。在下面的数据中,我希望“begin_date”为最小值,“end_date”为该id的最大值,同时仅保留唯一的id值。
改变这个:
data <- data.frame(id=c(1,1,1,2,2,3,3,3,4,4,4,4),begin_date=c(1970,1976,2000,1969,2010,1950,1986,1990,1960,1968,1972,1983),end_date=c(1976,2000,2012,2010,2013,1986,1990,1999,1968,1972,1983,2001))
对此:
data <- data.frame(id=c(1,2,3,4),begin_date=c(1970,1969,1950,1960),end_date=c(2012,2013,1999,2001))
答案 0 :(得分:1)
如果您将数据放在数据框中,那么您可以使用plyr的ddply
:
library(plyr)
data <- ddply(data, .(id), summarize, begin_date=min(begin_date),
end_date=max(end_date))
## id begin_date end_date
##1 1 1970 2012
##2 2 1969 2013
##3 3 1950 1999
##4 4 1960 2001
答案 1 :(得分:0)
你说这是一个data.frame,这就是我构建的:
dat <- data.frame(id=c(1,1,1,2,2,3,3,3,4,4,4,4),
begin_date=c(1970,1976,2000,1969,2010,1950,1986,1990,1960, 1968,1972,1983),
end_date=c(1976,2000,2012,2010,2013,1986,1990,1999,1968, 1972,1983,2001))
with( dat, data.frame(id=unique(id),
begin_date =tapply(begin_date, id, head, 1),
end_date= tapply(end_date, id, tail,1) )
)
id begin_date end_date
1 1 1970 2012
2 2 1969 2013
3 3 1950 1999
4 4 1960 2001
还可以使用min和max。