0

我想使用最后一个副本的信息更新数据框中第一个副本(相对于标识符变量)的条目。在下面的数据中,我希望“begin_date”为该 ID 的最小值,“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))
4

2 回答 2

1

如果将数据放入数据框中,则可以ddply为此使用 plyr:

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
于 2013-05-30T22:29:43.383 回答
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

也可以使用最小值和最大值。

于 2013-05-30T22:31:12.003 回答