>我有一个这样的数据框和一百多个这样的列
Group V1 V2 V3
1 NaN NaN NaN
1 NaN NaN NaN
1 NaN NaN NaN
1 NaN NaN NaN
1 0.12611 10.75 NaN
1 NaN NaN 1.9909
1 0.085867 12.323 2.0125
1 NaN NaN 2.3301
1 NaN NaN NaN
2 0.0574 3.827 NaN
2 0.15607 1.1194 NaN
2 NaN 0.81006 0.77779
2 0.0737 0.35366 NaN
2 0.1265 2.4674 0.82335
2 0.097067 NaN 0.90923
2 0.82887 1.8804 0.96405
当我尝试对每一列进行 wilcox.test 时,它可以工作 wilcox.test(V1 ~ Group, data = df)
但是,如果我尝试像这样申请 wilcox <- apply(df[,-1], 2, function(x) wilcox.test(x ~ Group, data = df))
它给出错误:
Error in wilcox.test.formula(x ~ Group, data = df) :
grouping factor must have exactly 2 levels
有人知道出了什么问题吗?
我们需要为那些元素数量较少的情况创建一个if/else
条件。 假设这是因为缺少值
library(purrr)
library(dplyr)
df[-1] %>%
map(~ tibble(.x, Group = df$Group)) %>%
map(~ if(sum(!is.na(.$.x))>2 | nrow(.x) > 2)
broom::tidy(wilcox.test(.x~Group, data = .) ) else NA)
对 OP 的代码使用相同的方法
apply(df[,-1], 2, function(x) if(sum(!is.na(x)) >2 )
wilcox.test(x ~ Group, data = df) else NA)