更新data.table中的向量

pom*_*ber 3 r vector data.table

我有这个:

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
Run Code Online (Sandbox Code Playgroud)

我想改变dt[index==2,items]c(6,7).

我试过了:

dt[index==2, items] = c(6,7)
dt[index==2, items := c(6,7)]
Run Code Online (Sandbox Code Playgroud)

ags*_*udy 5

一种解决方法是使用ifelse:

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

   index items
1:     1 1,2,3
2:     2   6,7
Run Code Online (Sandbox Code Playgroud)

编辑正确的答案:

 dt[index==2,items :=  list(list(c(6,7)))]
Run Code Online (Sandbox Code Playgroud)

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


有两种方法可以使用:=运算符data.table:

  1. LHS:= RHS形式:

    DT[, c("col1", "col2", ..) := list(val1, val2, ...)]
    
    Run Code Online (Sandbox Code Playgroud)

    它对list()RHS 进行了论证.要添加列表列,您需要使用另一个列表进行换行(如上所示).

  2. 功能形式:

    DT[, `:=`(col1 = val1, ## some comments
              col2 = val2, ## some more comments
              ...)]
    
    Run Code Online (Sandbox Code Playgroud)

    添加一些注释和赋值特别有用.