2015-10-13 57 views
1

某些字符串中選擇行下面我有一個數據幀:當它們包含,使用R

Acct <- c(1001, 1002, 1003) 
Tran <- c(01, 02, "ALL") 
Group <- c(01, 01, 02) 
DF1 <- data.frame(Acct, Tran, Group) 

現在我需要選擇行,其中「ALL」出現了。結果應該是這樣的:

Acct | Tran | Group 
1003 | ALL | 2 

有一點要提的是,「ALL」可以在任何列(不只是「過渡」),並可以有任意數量的列。

+0

一個快速和骯髒的方法是,'DF1 < - 子集(DF1,DF1 [,1] == 「ALL」 | DF1 [,2] ==「ALL」| DF1 [,3] ==「ALL」)'。儘管想着更好的方式。 – Badger

+0

使用'grepl'來匹配字符串和'colnames(DF1)'來遍歷所有列。 – Frash

回答

3

你可以使用DF1 == "ALL"來得到一個邏輯矩陣來找到ALL。然後我們可以取該矩陣的rowSums(),並保留總和不爲零的那些。

DF1[rowSums(DF1 == "ALL") != 0, ] 
# Acct Tran Group 
# 3 1003 ALL  2 
+0

這會引起爭議嗎? 'DF1 [!! rowSums(DF1 ==「ALL」),]' –

+0

有些人這樣做。但我不:) –

+1

前! (編碼高爾夫傳入) –

2

使用此行:

apply(DF1 == "ALL",1,any) 

這將導致一個T/F矢量對應於該包含至少一箇中的行 「ALL」

DF1 == "ALL"給出:

> DF1 == "ALL" 
     Acct Tran Group 
[1,] FALSE FALSE FALSE 
[2,] FALSE FALSE FALSE 
[3,] FALSE TRUE FALSE 

通過使用apply,如上所述,您將獲得:

> apply(DF1 == "ALL",1,any) 
[1] FALSE FALSE TRUE 

如果你想行:

> select <- apply(DF1 == "ALL",1,any) 
> DF1[select,] 

    Acct Tran Group 
3 1003 ALL  2 
相關問題