2015-10-13 31 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 
相关问题