This question already has answers here:
Using lists inside data.table columns

(2个答案)


5年前关闭。




我有这个:
dt = data.table(index=c(1,2), items=list(c(1,2,3),c(4,5)))
#   index items
#1:     1 1,2,3
#2:     2   4,5

我想将dt[index==2,items]更改为c(6,7)

我试过了:
dt[index==2, items] = c(6,7)
dt[index==2, items := c(6,7)]

最佳答案

一种解决方法是使用ifelse:

 dt[,items:=ifelse(index==2,list(c(6,7)),items)]

   index items
1:     1 1,2,3
2:     2   6,7

编辑正确的答案:
 dt[index==2,items :=  list(list(c(6,7)))]

实际上,您还需要一个列表,因为data.table使用list(.)来查找要通过引用分配给列的值。

:=中使用data.table运算符有两种方法:
  • LHS:= RHS形式:
    DT[, c("col1", "col2", ..) := list(val1, val2, ...)]
    

    它在RHS上采用list()参数。要添加列表列,您需要包装另一个列表(如上图所示)。
  • 功能形式:
    DT[, `:=`(col1 = val1, ## some comments
              col2 = val2, ## some more comments
              ...)]
    

    在作业中添加一些注释特别有用。
  • 10-07 19:57
    查看更多