【发布时间】:2017-05-24 10:40:27
【问题描述】:
我有一个看起来像这样的数据框:
id<-c(1,1,1,3,3)
date1<-c("23-01-08","01-11-07","30-11-07","17-12-07","12-12-08")
type<-c("A","B","A","B","B")
df<-data.frame(id,date,type)
df$date<-as.Date(as.character(df$date), format = "%d-%m-%y")
我想要的是添加一个新列,其中包含每种类型的每个 ID 的最早日期。第一次尝试工作正常,并且仅基于 ID 进行聚合和合并。
d = aggregate(df$date, by=list(df$id), min)
df2 = merge(df, d, by.x="id", by.y="Group.1")
我想要的也是按类型过滤并得到这个结果:
data.frame(df2, desired=c("2007-11-30","2007-11-01", "2007-11-30","2007-12-17","2007-12-17"))
我尝试了很多可能性。我真的认为它可以用列表来完成,但我不知道如何......
d = aggregate(df$date, by=list(df$id, df$type), min)
# And merge the result of aggregate with the original data frame
df2 = merge(df,d,by.x=list("id","type"),by.y=list("Group.1","Group.2"))
对于这个简单的示例,我可以将类型分离到它们自己的 df 中,构建新列,然后组合生成的 2 个 df,但实际上有许多类型和第 3 列也必须进行类似过滤,这不会实用...
谢谢!
【问题讨论】:
-
在制作
df时,date1和date之间存在拼写错误 -
@thelatemail 你是对的。我绕了一圈来制作那个日期栏...