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

时间:2018-02-05 22:41:43

标签: r dplyr subset apply

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

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

示例:

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)))]

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

2 个答案:

答案 0 :(得分:0)

setDate = (newDate) => {
    this.setState({ selectedDate: moment(newDate) });
}

handleOnPress = () => {
    this.props.onModalButtonPress(this.state.selectedDate.unix());
}

答案 1 :(得分:0)

如果数据框全部为数字,则Onyambu的解决方案有效。

这一行代码对我有用。

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

&#34;&amp;&#34;处理过像包容性的#34;或&#34;声明。 它读取:在数据框(x)中,取所有不是所有NA的列(2)(!all(is.na(x))或NOT all all(0!all(x == 0)。希望这有助于。

如果您有更优雅或简单的解决方案,请发布。