使用多个条件在R中使用apply函数对列进行子集

我可以在两个动作中完成我的子集,但我想学习如何在一个动作中完成它。

我希望保留所有行,排除全部为NAs的列,并排除全为零的行。

示例:

x1 <- 1:10
x2 <- round(rnorm(10, mean=3, sd = 1), 0)
x <- cbind(x1, x2, x3 = 0, x4 = NA)
x

x1 x2 x3 x4
1  2  0 NA
2  5  0 NA
3  2  0 NA
4  5  0 NA
5  3  0 NA
6  3  0 NA
7  2  0 NA
8  5  0 NA
9  3  0 NA
10  3  0 NA

xsub <- x[,apply(x, 2, function (x) !all(is.na(x)))] #excludes cols with all NAs
xsub <- xsub[,apply(xsub, 2, function(x) !all(x==0))] #excludes cols with all zeros

我尝试在函数语句中使用|(或),但没有任何反应。语法错误?也只是在学习函数。

xsub <- x[,apply(x, 2, function(x) !all(x==0) | !all(is.na(x)))]

我不知道如何使用subset来调用具有这些值的所有列,只调用具有特定值的列。

转载请注明出处:http://www.intsu.net/article/20230429/2503256.html