【问题标题】:Assign the value of the first row of a group to the whole group [duplicate]将组的第一行的值分配给整个组[重复]
【发布时间】: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 %&gt;% group_by(id) %&gt;% mutate(id.date = first(date))

标签: r dataframe dplyr data.table


【解决方案1】:
DT %>%
  group_by(id) %>%
  mutate(id.date = date[1])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多