我有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
答案 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)})