【问题标题】:Identify and replace minimum value from a numeric column present in all dataframes in a list of dataframes识别并替换数据框列表中所有数据框中存在的数值列的最小值
【发布时间】:2019-02-12 10:57:19
【问题描述】:

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

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) 解决方案,那就太好了。

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一个基本的 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), "*")))
    

    【讨论】:

      【解决方案2】:
            for(i in 1:length(myList)){
        currMin = min(myList[[i]]$y)
        myList[[i]]$y[myList[[i]]$y==currMin] <- '*'
      }
      

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

      【讨论】:

        猜你喜欢
        • 2018-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-12
        • 2021-06-12
        相关资源
        最近更新 更多