我正在尝试在R中对数据框进行子集...我想删除所有列中值为> 0的所有行,其中包含“空白”一词。
Ex输入)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))
我想更改此设置,以便搜索其中包含“空白”字样的所有列,然后删除这些列中的值大于0的行。
我正在尝试df2=subset(df, subset=!((grepl("Blank",colnames(df)))>0))
,但它无法正常工作。
答案 0 :(得分:0)
下次考虑使用dput
来提供可重现的示例。鉴于此,此代码应该可以工作(但我没有测试它):
df <- df[rowSums(df[, grepl("Blank", colnames(df))]) > 0, ]
编辑:这与所要求的完全相反。你走了:
df[rowSums(df[, grepl("Blank", colnames(df))]) == 0, ]
答案 1 :(得分:0)
这也应该有效:
df[!(apply(df[,c("Blank1","Blank2")] > 0,1,sum) > 0),]
答案 2 :(得分: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参数中,我们只返回那些我们想要的行。
祝你好运!