我用的是这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来 Select 带有函数的变量.我期待着用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相关问答推荐

根据R中两个变量的两个条件删除带有dspirr的行

根据日期从参考帧中创建不同的帧

多个模拟序列间的一种预测回归关系

如何在分组条形图中移动相关列?

有效识别长载体中的高/低命中

使用data.table::fcase()而不是dplyr::case_When()时保持值

Geom_Hline将不会出现,而它以前出现了

将箭头绘制在图形外部,而不是图形内部

手动指定从相同数据创建的叠加图的 colored颜色

网络抓取新闻标题和时间

快速合并R内的值

整理曲线图、曲线图和点图

随机将数据帧中特定列上的某些行设置为NA

长/纬点继续在堪萨斯-SF结束,整齐的人口普查

如何使投篮在R中保持一致

如何为包创建自定义roxygen2标签?

R:水平旋转图

如何将两个用不同的运算符替换*的矩阵相乘

如何修复geom_rect中的层错误?

如何使用包含要子集的值的列表或数据框来子集多个列?