[英]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
如果有零,我将得到非零值。 如果有负值的可能性改变sum
对function(x){sum(abs(x))}
这反而会采取单元的绝对值加法之前。
一旦应用了sum
函数,我便检查仅获取那些为0的值:)
我们将所有内容包装到'df'的row参数中,并且仅返回所需的行。
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.