使用相同data.table的其他列更新列,仅使用其字符串名称

时间:2017-07-20 15:25:30

标签: r string data.table

我想要使用同一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)]

但没有任何东西能给我所需的输出。

1 个答案:

答案 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]]