之前,我的问题是如何从包含na?的其他列中按名称获取列值,但是现在此表是动态的,如果有更多列(最多6列),则应该是具有value的列和在北美休息。
也就是说,如果有2个名称和值分别为var1和value_v1,var2和value_v2,则应该有var3和value3 = NA,直到获得var6和value6
这是一个简单的例子。
THis table is dinyamic, there may be more columns or not.
> d
value1 value2 var1
1: one two value1
2: uno dos value2
3: 1 2 value1
4: NA NA NA
5: 6 7 value2
我有一个解决方案,可以添加一列(column的值= value_v1,value_v2 ...等),其中包含由'((column的名称= var1,var2 ..)指定的列的值。
对于这种情况,我有解决方案:
d [,value_v1:= get(replace(var1,is.na(var1),“ value1”)),1:nrow(d)] d [,value_v2:= get(replace(var2,is.na(var2),“ value2”)),1:nrow(d)]
> d
但是我需要考虑是否存在更多的列名和列值(最多6个)。 如果有另一个columana,则可能是结果,其想法是进入var6
> d
value1 value2 var1 value_v1 var2 value_v2
1: one two value1 one na na
2: uno dos value2 dos na na
3: 1 2 value1 1 na na
4: NA NA NA NA na na
5: 6 7 value2 7 na na
答案 0 :(得分:2)
一个选项是get
d[, value.of.col := get(replace(name.of.col, is.na(name.of.col),
"value.1")), 1:nrow(d)]
d
# value.1 value.2 name.of.col value.of.col
#1: one two value.1 one
#2: uno dos value.2 dos
#3: 1 2 value.1 1
#4: <NA> <NA> <NA> <NA>
#5: 6 7 value.2 7
或使用row/col
中的base R
索引
i1 <- !is.na(d$name.of.col)
m1 <- cbind(seq_len(nrow(d[i1,])), match(d$name.of.col[i1], names(d)))
d$value.of.col[i1] <- as.data.frame(d)[i1, 1:2][m1]