如果我有data.table:
d <- data.table(NUM = c(1, 2, 3),
CLASS = c(1, 1, 1),
VAR = c(4, 5, 3))
还有一个向量a <- c(7, 9, 10)
。
如何在将a
和CLASS
中的第一个值取下来并携带下来时,如何将具有1个值的向量NUM
添加到列VAR
的新行中? >
预期输出:
NUM CLASS VAR
1 1 1 4
2 2 1 5
3 3 1 3
4 1 7 4
5 1 9 4
6 1 10 4
我想找到一种精简的方式来计算除CLASS
以外的所有列的第一个值。也许和rbindlist
在一起?
答案 0 :(得分:4)
是的,rbind
/ rbindlist
的工作原理是:
rbind(
d,
d[1, replace(as.list(.SD), names(.SD) == "CLASS", list(a))]
)
NUM CLASS VAR
1: 1 1 4
2: 2 1 5
3: 3 1 3
4: 1 7 4
5: 1 9 4
6: 1 10 4
或更普遍地说,如果还有其他等长的替换物...
rr = list(CLASS = a, VAR = 1:3)
rbind(
d,
d[1, replace(as.list(.SD), match(names(rr), names(.SD)), rr)]
)
NUM CLASS VAR
1: 1 1 4
2: 2 1 5
3: 3 1 3
4: 1 7 1
5: 1 9 2
6: 1 10 3
答案 1 :(得分:1)
这可能会帮助:
CLASS <- c(7, 9, 10)
e <- cbind(NUM=rep(d$NUM[1], nrow(d)), CLASS, VAR=rep(d$VAR[1], nrow(d)))
e
d <- rbind(d, e)
d
# NUM CLASS VAR
# 1: 1 1 4
# 2: 2 1 5
# 3: 3 1 3
# 4: 1 7 4
# 5: 1 9 4
# 6: 1 10 4