【问题标题】:collapse rows in data.table折叠 data.table 中的行
【发布时间】:2014-06-04 12:11:51
【问题描述】:

我有一个 1M 行 2 列的 data.table

虚拟数据:

require(data.table)
ID <- c(1,2,3)
variable <- c("a,b","a,c","c,d")
dt <- data.table(ID,variable)
dt
> dt
ID 变量
1 a,b
2 a, c
3 c,d

现在我想通过“ID”将“变量”列折叠成不同的行,就像reshape2中的“melt”函数或data.table中的melt.data.table一样

这就是我想要的:

标识变量 1个 1个 2个 2℃ 3℃ 3天

PS: 鉴于预期的结果,我知道如何执行 reverse 步骤。

dt2 <- data.table(ID = c(1,1,2,2,3,3), variable = c("a","b","a","c","c","d"))
dt3 <- dt2[, list(variables = paste(variable, collapse = ",")), by = ID]

有什么提示或建议吗?

【问题讨论】:

  • dt[, strsplit(variable, ","), by=ID]
  • here

标签: r data.table


【解决方案1】:

由于strsplit 是矢量化的,这将是这里的耗时操作,我会避免在每个组上使用它。相反,可以先在整个列上拆分,,然后重构data.table,如下所示:

var = strsplit(dt$variable, ",", fixed=TRUE)
len = vapply(var, length, 0L)
ans = data.table(ID=rep(dt$ID, len), variable=unlist(var))

#    ID variable
# 1:  1        a
# 2:  1        b
# 3:  2        a
# 4:  2        c
# 5:  3        c
# 6:  3        d

【讨论】:

    猜你喜欢
    • 2014-08-04
    • 1970-01-01
    • 2017-01-30
    • 2013-04-09
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2022-11-02
    相关资源
    最近更新 更多