【问题标题】:Using R, drop columns with more than 20% 0s [closed]使用 R,删除超过 20% 0 的列 [关闭]
【发布时间】:2020-01-07 00:33:50
【问题描述】:

我在 R 中有一个数据框。对于每个条目,我有 10 列值,最后一列指示条目所属的组(A 组、B 组、C 组等)

我需要做的是:

1 ) 删除超过 20% 的条目等于 0 的所有列

2) 删除任一组中超过 20% 的值为 0 的所有列。更糟糕的是,我只想单独保留每个组至少有 20% 非零的列。

你能帮忙吗:-s

谢谢!

【问题讨论】:

    标签: r filter subset


    【解决方案1】:

    我们可以在逻辑向量上使用colMeans

    df1[colMeans(df1 == 0)  < 0.2]
    

    如果它基于“组”

    nm1 <- setdiff(names(df1), "group")
    i1 <- !Reduce(`|`,  lapply(split(df1[nm1], df1$group), 
                     function(x) colMeans(x == 0) >= 0.2))
    df1[c("group", names(which(i1)))]
    

    或者使用dplyr

    library(dplyr)
    df1 %>%
       select_if(~ mean(. == 0) < 0.2)
    

    有了分组,就可以了

    df1 %>%
       group_by(group) %>% 
       summarise_at(vars(-group_cols()), ~ mean(.==0) >= 0.2) %>% 
       summarise_at(-1, any) %>%
       select_if(~ !.) %>%
       names %>% 
       select(df1, group, .)
    

    数据

    df1 <- data.frame(group = rep(c("A", "B", "C"), each = 5),
       col1 = c(0, 0, 0, 1, 2, 0, 5, 3, 0, 0, 1:5), col2 = 1:15, col3 = c(0, 1:14) )
    

    【讨论】:

    • 谢谢你们!!!太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2015-07-14
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多