【问题标题】:Perform ifelse() on every element of a data frame, but different test for each column in R对数据框的每个元素执行 ifelse(),但对 R 中的每一列进行不同的测试
【发布时间】:2016-02-24 01:40:27
【问题描述】:

我有一个大数据框 [4000,600],如果元素小于每列最大值的三个数量级,我想将元素转换为 0。因此,每个元素都需要与其列的最大值进行比较,如果元素

我很难让 apply() 让我使用 ifelse() 函数。我缺少更好的方法或功能吗?我对 R 很陌生。

【问题讨论】:

  • 如果您想要一个好的答案,我建议您发布一段代码。

标签: r dataframe apply


【解决方案1】:

使用lapply 通过replace 调用遍历每一列:

dat <- data.frame(a=c(1,2,1001),b=c(3,4,3003))
dat
#     a    b
#1    1    3
#2    2    4
#3 1001 3003

dat[] <- lapply(dat, function(x) replace(x, x < max(x)/10^3, 0) )
dat
#     a    b
#1    0    0
#2    2    4
#3 1001 3003

【讨论】:

    【解决方案2】:

    如果您使用按列应用,这应该与 ifelse 一起使用:

    df <- data.frame(a = c(1:10, 4000), b = c(4:13, 7000))
    
    apply(df, 2, function(x){ifelse(x < 0.001*max(x), 0, x)})
    

    【讨论】:

      【解决方案3】:

      我们可以在不使用ifelse 的情况下做到这一点

      library(dplyr)
      dat %>% 
          mutate_each(funs((.>= 0.001*max(.))*.))
      #     a    b
      #1    0    0
      #2    2    4
      #3 1001 3003
      

      数据

      dat <- data.frame(a=c(1,2,1001),b=c(3,4,3003))
      

      【讨论】:

        猜你喜欢
        • 2020-03-27
        • 2020-12-10
        • 2022-01-07
        • 1970-01-01
        • 2010-12-14
        • 2018-01-03
        • 2013-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多