[英]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.