【发布时间】:2019-05-23 11:37:16
【问题描述】:
我有一个如下的 data.table:
DT<- data.table(id=c(1,1,1,1,2,2,2,2), date = c(10,11,12,13,12,12,14,18), seq = c(1,2,3,4,1,2,3,4,1,2,3,4))
setkey(DT,id)
setorder(DT,id,seq)
> DT
id date seq
1: 1 10 1
2: 1 11 2
3: 1 12 3
4: 1 13 4
5: 2 12 1
6: 2 12 2
7: 2 14 3
8: 2 18 4
我想创建一个新列“id.date”,它将指示每个 id 第一行的“日期”值。因此,新的 data.table 将是:
id date seq id.date
1: 1 10 1 10
2: 1 11 2 10
3: 1 12 3 10
4: 1 13 4 10
5: 2 12 1 12
6: 2 12 2 12
7: 2 14 3 12
8: 2 18 4 12
我知道我可以得到第一行的值
DT[,.SD[1,date],by=id]$V1
但我怎样才能将此值分配给组的所有行?
dplyr 可以做同样的事情吗?
【问题讨论】:
-
就
DT[, id.date := date[1], id] -
Thanx Sotos,它比我想象的要简单得多!任何
dplyr解决方案? -
同一个概念,
df %>% group_by(id) %>% mutate(id.date = first(date))
标签: r dataframe dplyr data.table