R 将向量作为单独的新列追加到data.table,向量循环使用单个值

R 将向量作为单独的新列追加到data.table,向量循环使用单个值,r,data.table,R,Data.table,我想向data.table中添加一个向量,该向量的每个元素名称对应一个新列,并根据向量的元素值重复该值 因此: x <- data.table(a=1:2, b=3:4) v <- c(c=5, d=6) 我尝试过的事情: cbind将向量添加为单个列: cbind(x, v) # a b v # 1: 1 3 5 # 2: 2 4 6 使用来自的方法也会错误地矢量化(水平而不是垂直): 循环工程: for (i in seq_along(v)) x[, (names(v)

我想向
data.table
中添加一个向量,该向量的每个元素名称对应一个新列,并根据向量的元素值重复该值

因此:

x <- data.table(a=1:2, b=3:4)
v <- c(c=5, d=6)
我尝试过的事情:

cbind
将向量添加为单个列:

cbind(x, v)
#    a b v
# 1: 1 3 5
# 2: 2 4 6
使用来自的方法也会错误地矢量化(水平而不是垂直):

循环工程:

for (i in seq_along(v)) x[, (names(v)[i]) := v[i]]
结果:

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

我们也可以在不循环的情况下完成这项工作

x[, names(v) := as.list(v)]
x
#   a b c d
#1: 1 3 5 6
#2: 2 4 5 6

更好的
for
循环可能是
for(name in names(v))set(x,j=name,value=v[name])
.Ah,
as.list
而不是
list
,谢谢。为什么
名称(v)
周围不需要paren?它也适用于它们。@MaxGhenis使用parens可能更好,因为它更通用,即'cols@Max Really,
v
应该从一开始就使用
v=list(c=…)
指定。表行是(有序的)元组而不是向量。它适用于
vlist,而不是说“带单个值”,您想要的术语是“向量循环单个值”
x
#    a b c d
# 1: 1 3 5 6
# 2: 2 4 5 6
x[, names(v) := as.list(v)]
x
#   a b c d
#1: 1 3 5 6
#2: 2 4 5 6