如何在R中的文本中查找和替换数据框中的最小值

时间:2018-11-14 20:21:27

标签: r

我有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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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"

答案 2 :(得分:1)

apply(df, MARGIN=2, FUN=(function(x){x[which.min(x)] <- 'min'; return(x)})