我想向data.table
添加一个向量,其中每个矢量元素的名称对应一个新列,并根据向量的元素值重复该值。
所以给出:
x <- data.table(a=1:2, b=3:4)
v <- c(c=5, d=6)
我正在寻找结果:
data.table(a=1:2, b=3:4, c=5, d=6)
# a b c d
# 1: 1 3 5 6
# 2: 2 4 5 6
我尝试的事情:
cbind
将矢量添加为单列:
cbind(x, v)
# a b v
# 1: 1 3 5
# 2: 2 4 6
使用Adding multiple columns to a data.table, where column names are held in a vector的方法也会错误地(水平而不是垂直)矢量化:
x[, (names(v)) := v]
# a b c d
# 1: 1 3 5 5
# 2: 2 4 6 6
x[, (names(v)) := list(v)]
# Same as above.
答案 0 :(得分:4)
我们可以在没有循环的情况下做到这一点
x[, names(v) := as.list(v)]
x
# a b c d
#1: 1 3 5 6
#2: 2 4 5 6
答案 1 :(得分:2)
循环工作:
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