【问题标题】:How to find and replace min value in dataframe with text in r如何用r中的文本查找和替换数据框中的最小值
【发布时间】:2018-11-15 05:06:00
【问题描述】:

我有 20 列的数据框,我喜欢确定每列中的最小值,并用诸如“min”之类的文本替换它们。感谢任何帮助

样本数据:

   a    b     c
-0.05 0.31  0.62
 0.78 0.25 -0.01
 0.68 0.33 -0.04
-0.01 0.30  0.56
 0.55 0.28 -0.03

期望的输出

    a    b     c
  min   0.31  0.62
  0.78  min  -0.01
  0.68  0.33   min
 -0.01  0.30  0.56
  0.55  0.28 -0.03

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以apply 对每一列使用字符串替换最小值的函数。这将返回一个matrix,如果需要,可以将其转换为数据框。正如 IceCreamToucan 所指出的,所有行的类型都是 character,因为每个变量都必须具有相同的类型:

    apply(df, 2, function(x) {
        x[x == min(x)] <- 'min'
        return(x)
    })
    
         a       b      c      
    [1,] "min"   "0.31" "0.62" 
    [2,] "0.78"  "min"  "-0.01"
    [3,] "0.68"  "0.33" "min"  
    [4,] "-0.01" "0.3"  "0.56" 
    [5,] "0.55"  "0.28" "-0.03"
    

    【讨论】:

    • 最好使用df[] &lt;- lapply(df, function(x) replace(x, x == min(x), "min")) 来获取数据框作为回报。
    【解决方案2】:
    apply(df, MARGIN=2, FUN=(function(x){x[which.min(x)] <- 'min'; return(x)})
    

    【讨论】:

      【解决方案3】:

      您可以使用下面的方法,但要知道这会将您的所有列都转换为字符,因为向量必须包含具有相同类型的元素。

      library(dplyr)
      
      df %>% 
        mutate_all(~ replace(.x, which.min(.x), 'min'))
      #       a    b     c
      # 1   min 0.31  0.62
      # 2  0.78  min -0.01
      # 3  0.68 0.33   min
      # 4 -0.01  0.3  0.56
      # 5  0.55 0.28 -0.03
      

      【讨论】:

        猜你喜欢
        • 2017-12-11
        • 2014-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多