使用上一个重复记录中的条目更新第一个副本

时间:2013-05-30 22:15:07

标签: r duplicates

我想更新数据框中第一个副本(相对于标识符变量)的条目,其中包含来自最后一个副本的信息。在下面的数据中,我希望“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))

2 个答案:

答案 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。