簡體   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