繁体   English   中英

如何通过从具有给定字符串且值小于X的列中删除所有行来对数据帧进行子集化?

[英]How to subset a data frame by removing all rows from columns with a given string, and value less than X?

我正在尝试在R中对数据帧进行子集处理...我想删除其中所有带有'Blank'字词的列中值均大于0的所有行。

防爆输入)df

ID OTU1 OTU2 Blank1 Blank2 1 5 0 0 2 2 3 3 0 0 3 0 9 5 0 4 2 0 0 0

所需的输出

ID OTU1 OTU2 Blank1 Blank2 2 3 3 0 0 4 2 0 0 0

我可以按列分别使用df2=subset(df, subset=!(Blank1>0 | Blank2>0))

我想更改它,以便它搜索其中包含单词“ Blank”的所有列,然后删除这些列中的值大于0的行。

我正在尝试df2=subset(df, subset=!((grepl("Blank",colnames(df)))>0))但是它无法正常工作。

考虑下次使用dput提供可重现的示例。 鉴于此,此代码应该可以工作(但我没有对其进行测试):

df <- df[rowSums(df[, grepl("Blank", colnames(df))]) > 0, ]

编辑:这确实与要求的相反。 干得好:

df[rowSums(df[, grepl("Blank", colnames(df))]) == 0, ]

这也应该工作:

df[!(apply(df[,c("Blank1","Blank2")] > 0,1,sum) > 0),]

使用grepl函数,我将使用以下代码:

df2 <- df[apply(df[,grepl("Blank",names(df))],1,sum)==0,]

打破那个...

apply按行或列应用函数,参数1告诉它执行行。 通过应用sum如果有零,我将得到非零值。 如果有负值的可能性改变sumfunction(x){sum(abs(x))}这反而会采取单元的绝对值加法之前。

一旦应用了sum函数,我便检查仅获取那些为0的值:)

我们将所有内容包装到'df'的row参数中,并且仅返回所需的行。

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM