通过两个不同列中的两个条件删除 R 中的列

标签 r dataframe dplyr subset multiple-columns

我正在使用这个data.frame。我需要通过将“0”组与“1”组进行比较来对每列应用统计测试 (wilcox.test),但只有当每个组至少有 2 个值时我才能这样做。如何删除组大小“0”或组大小“1”小于 2 的所有列?然后我就可以毫无错误地运行我的代码。因此,在此示例中,pearcherry 列将被删除。

 df <- data.frame(group=c(rep(0,10),rep(1,10)),
      apple = as.numeric(c(runif(20, -1, 18))),
      pear = as.numeric(c(rep("NA",12), runif(8, 2, 7))),
      banana = as.numeric(c(runif(10, 1, 3), runif(10, 2.5, 6))),
      cherry = as.numeric(c(runif(9, 5, 12), rep("NA",10), 4.31)),
      kiwi = as.numeric(c(rep("NA",8), runif(12, -1, 6))))

最佳答案

您可以使用 select + where 来通过函数选择变量。我预计使用 selectgroup_by 来处理这个问题,但 dplyr 似乎无法支持这一点。因此,解决方法是使用 tapply(或 ave)进行分组:

library(dplyr)

df %>%
  select(where(~ all(tapply(.x, df$group, \(x) sum(!is.na(x)) >= 2))))

   group      apple   banana        kiwi
1      0  7.9768511 1.183422          NA
2      0 -0.6611309 1.948172          NA
3      0  0.6690410 1.556230          NA
4      0  1.3582682 1.063583          NA
5      0  4.5359535 2.972903          NA
6      0  8.8755979 2.074685          NA
7      0  2.9280202 1.734720          NA
8      0  7.4065231 1.460041          NA
9      0  0.8837726 1.109268  1.54898128
10     0 -0.9704649 2.447073  4.27753379
11     1  3.2403002 4.839462 -0.88546624
12     1  0.4561026 4.703763  2.50467817
13     1 10.2888012 3.920268  2.62292534
14     1  3.4619229 3.010228  4.67953823
15     1  0.2207555 5.582971  3.71465882
16     1 -0.3694006 3.326906  4.17280678
17     1 13.1442999 3.018943  3.39256613
18     1  6.7433707 2.989773  0.04379258
19     1 16.0372570 2.839262  4.41795547
20     1 15.7012046 2.982483  3.13632483

关于通过两个不同列中的两个条件删除 R 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73301581/

相关文章:

r - 合并数据框中的重复行

python - 如何在 Pandas 数据框中显示特定数字

python - 结合 np.equal 和 np.less 创建单个数据帧?

r - dplyr 不接受 paste0() 作为 rename() 中的 old_name

r - 随机日期的(下)月末

r - 通过引导选择两个随机数

r - 使用聚合操作时如何避免在 data.table 中创建重复项

python - 如何在 pandas 中将 m×m 数据帧转换为 m*m×3 数据帧?

使用函数式编程用 dplyr 重命名列

r - 为使用 map() 创建的 ggplots 添加标题