如何绑定一个数据表和一个向量

Deb*_*Deb 2 r data.table

我想将data.table和vector绑定在一起,以使矢量内容成为data.table的新列(零值)。

DT <- data.table(x=c("A", "B", "C", "D", "E", "F"), y = rnorm(6))

DT2 <- c("paper11grid1", "paper12grid1", "paper13grid1")

Run Code Online (Sandbox Code Playgroud)

我想将DT2的内容更新为DT的新列名

 x          y     paper11grid1 paper12grid1 paper13grid1

 A  0.9643131           0   0   0

 B -0.8856350           0   0   0

 C -0.1489705           0   0   0

 D  2.0675105           0   0   0

 E -1.2965938           0   0   0

 F -0.8468514           0   0   0
Run Code Online (Sandbox Code Playgroud)

直接进行绑定只会将DT2添加为一个列

cbind(DT, DT2)
Run Code Online (Sandbox Code Playgroud)

Mat*_*ill 7

在中data.table,您可以将值分配给向量中指定的多个列。使用这种方法,您的答案很简单,如下所示:

DT[,(DT2) := 0]
Run Code Online (Sandbox Code Playgroud)

需要注意的一个区别:即使DT2是有效的向量,DT[, DT2 := 0]也只会产生一个名为的新列DT2。这与在中评估列名的方式有关[...]。通过使用括号-- (DT2)在括号内,在这种情况下[.data.table将被DT2视为向量,而不是列名。

  • 没有“ c”,括号就足够了 (5认同)
  • 谢谢@Frank-似乎我总能从您那里学到更多。现在查看[.data.table`的源代码,括号是否总是会首先触发尝试在父环境中评估内容的尝试,还是比这更细微的差别? (2认同)
  • 我认为它查看`\`:= \`(lhs,rhs)`并检查`lhs`是否为符号。如果不是,它将进行评估并寻找列名或位置的向量。 (2认同)