我想要使用同一data.table中其他列的值更新很多列。我需要使用他们的字符串名称。实际上,我有非常大的形式变量名称向量:
cols.x <- c('name1.x', 'name2.x', 'name3.x', ...)
我想使用其他列进行更新:
cols.y <- c('name1.y', 'name2.y', 'name3.y', ...)
但是,我找不到一种方法来生成data.table了解我还有右边的列:=,而不是字符串。
以下是工作示例:
library(data.table)
# Setting the data.table
DT <- data.table(V1.x=c(NA,c(1:5)), V2.x=c(NA,LETTERS[1:5]), V1.y=6:1, V2.y=LETTERS[1:6])
# Preparing the columns
cols.x <- c('V1.x','V2.x')
cols.y <- c('V1.y','V2.y')
# Assign cols.y to cols.x when cols.x is NA
DT[is.na(V1.x) | is.na(V2.x), cols.x := cols.y, with = F]
print(DT)
# Output
V1.x V2.x V1.y V2.y
1: NA V1.y 6 A
2: 1 A 5 B
3: 2 B 4 C
4: 3 C 3 D
5: 4 D 2 E
6: 5 E 1 F
# Desired Output
V1.x V2.x V1.y V2.y
1: 6 A 6 A
2: 1 A 5 B
3: 2 B 4 C
4: 3 C 3 D
5: 4 D 2 E
6: 5 E 1 F
我尝试了许多其他解决方案,例如:
DT[is.na(V1.x) | is.na(V2.x), cols.x := get(cols.y)]
# or
DT[is.na(V1.x) | is.na(V2.x), cols.x := as.list(cols.y)]
但没有任何东西能给我所需的输出。
答案 0 :(得分:0)
我刚刚找到了这个有效的解决方案
DT[is.na(V1.x) | is.na(V2.x), (cols.x) := DT[is.na(V1.x) | is.na(V2.x),cols.y, with = F]]