【问题标题】:Replace value with the name of its respective column将 value 替换为其相应列的名称
【发布时间】:2014-11-02 19:25:33
【问题描述】:

我有一个数据框:

Code    401k    CVS
101A            true
231N    true
FD54    true
99JB    
85F4    true

我正在尝试用相应的列名(例如“401k”)替换“真实”字符值。这是我想要的输出:

Code    401k    CVS
101A            CVS
231N    401k
FD54    401k
99JB    
85F4    401k

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    下面的编码使我能够将每个“真”值(字符)替换为其各自的列名。

    ##Replace every "true" value with its respective column name
    w <- which(df=="true",arr.ind=TRUE)
    df[w] <- names(df)[w[,"col"]]
    

    【讨论】:

      【解决方案2】:

      第一种方法不会先将数据强制转换为字符:

      wc <- droplevels(col(df, as.factor=TRUE)[which(df == "true")])
      df[levels(wc)] <- Map(factor, df[levels(wc)], labels = levels(wc))
      df
      #   Code  401k  CVS
      # 1 101A  <NA>  CVS
      # 2 231N  401k <NA>
      # 3 FD54  401k <NA>
      # 4 99JB  <NA> <NA>
      # 5 85F4  401k <NA>
      

      或者您可以将which 与数据框索引一起使用并将所有内容转换为字符:

      df[] <- lapply(df, function(x) levels(x)[x])
      w <- which(df == "true", arr.ind = TRUE)
      df[w] <- names(df)[w[,"col"]]
      df
      #   Code  401K  CVS
      # 1 101A  <NA>  CVS
      # 2 231N  401K <NA>
      # 3 FD54  401K <NA>
      # 4 99JB  <NA> <NA>
      # 5 85F4  401K <NA>
      

      【讨论】:

      • 谢谢你,理查德,你的帮助。我使用了 which() 函数,并且能够成功获得所需的输出。
      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2019-05-11
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多