【问题标题】:Vector as entry in `data.table`向量作为 `data.table` 中的条目
【发布时间】:2017-06-26 18:00:12
【问题描述】:

我有一个data.table,看起来像这样:

dt <- data.table(a = 1, b = 1, c = 1)

我需要将列 b 视为可变长度的整数向量,因此我可以向其附加其他元素。例如,我想将2 添加到第一行的b 列。我试过了

dt[a == 1, b := c(b, 2)]

但这不起作用。它给了我一个警告:

Warning message:
In `[.data.table`(dt, a == 1, `:=`(b, c(b, 2))) :
  Supplied 2 items to be assigned to 1 items of column 'b' (1 unused)

什么是正确的语法?

【问题讨论】:

  • 追加是什么意思? b:=b+2 有效。 b := paste(b,2, sep = "") 工作。
  • 我需要b 中的条目成为向量c(1,2)。
  • 将该列初始化为列表并进行赋值:dt &lt;- data.table(a = 1, b = list(1), c = 1); dt[[1,2]] &lt;- c(dt[[1,2]],2)
  • 这可行,但我需要通过列a 中的元素引用行。

标签: r data.table


【解决方案1】:
dt <- data.table(a = 1, b = 1:3, c = 1)
dt[, b := .(lapply(b, c, 2))][]
#   a   b c
#1: 1 1,2 1
#2: 1 2,2 1
#3: 1 3,2 1

如果需要先转换为list(即当还不是list,并进行子集化或执行by),请在上面添加dt[, b := .(as.list(b))]。

【讨论】:

  • 这不适用于给定的示例,即我尝试了dt &lt;- data.table(a = 1, b = 1, c = 1); dt[, b := lapply(b, c, 2)][],但我收到了与我的问题相同的警告消息。
猜你喜欢
  • 1970-01-01
  • 2018-06-01
  • 2013-12-01
  • 1970-01-01
  • 2017-10-20
  • 2016-01-30
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
相关资源
最近更新 更多