从数据框列表中所有数据框中的数字列中标识并替换最小值

时间:2019-02-12 02:49:33

标签: r

我需要一种方法来识别数据帧列表中所有数据帧中特定列中的最小值,并将其替换为一些非数字字符。例如:

df1 <- data.frame(x=c("a","b","c"), y=c(2,4,6))
df2 <- data.frame(x=c("a","b","c"), y=c(10,20,30))
myList <- list(df1, df2)


[[1]]
  x y
1 a 2
2 b 4
3 c 6

[[2]]
  x  y
1 a 10
2 b 20
3 c 30

应该成为

[[1]]
  x y
1 a *
2 b 4
3 c 6

[[2]]
  x  y
1 a *
2 b 20
3 c 30

最好的方法是什么?如果有人知道Base R和外部软件包(purrr)解决方案,那就太好了。

谢谢!

2 个答案:

答案 0 :(得分:4)

这是基本的R选项

lapply(myList, function(df) transform(df, y = replace(y, which.min(y), "*")))
#[[1]]
#  x y
#1 a *
#2 b 4
#3 c 6
#
#[[2]]
#  x  y
#1 a  *
#2 b 20
#3 c 30

或与tidyverse

中的相同
library(tidyverse)
map(myList, ~.x %>% mutate(y = replace(y, which.min(y), "*")))

答案 1 :(得分:0)

      for(i in 1:length(myList)){
  currMin = min(myList[[i]]$y)
  myList[[i]]$y[myList[[i]]$y==currMin] <- '*'
}

请注意,分配“ *”会将类型转换为字符