【问题标题】:obtain values of column by name from another columns and add more columns with na从其他列按名称获取列的值并添加更多列与 na
【发布时间】:2019-09-26 00:36:02
【问题描述】:

以前,我的问题是如何从包含 na 的其他列中按名称获取列值,但现在这个表是动态的,如果有更多列(最多 6 列),它应该是具有值的列和在北美休息。

也就是说,如果有2个name和value put var1 and value_v1, var2 and value_v2,应该有var3 and 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 

我有一个解决方案来添加一个列 (value of column=value_v1,value_v2...etc),其中包含由 '(name of 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

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    一个选项是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
    

    或者使用来自base Rrow/col索引

    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]
    

    【讨论】:

    • @Lectxx7 在哪种情况下?抱歉没有收到您的问题
    猜你喜欢
    • 2020-07-06
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多