2016-06-10 18 views
2

设说我有这样的R:引用范围列在dplyr

txt A1 A2 B1 B2 
1 ala 6  9 12 23 
2 ata 1  3 3  11 
.... 

的数据帧df我想用dplyr用于过滤基于一系列的变量的总和的行。 我想:

filter(df, sum(A2:B1)>10) 

....但它不工作。

任何人都可以在dplyr中提出解决方案吗?是的,我知道这可以通过简单的子集来完成。

+0

'filter(df,A2 + B1> 10)'? – Sotos

+0

我知道在这个特定的情况下,你可以简单地添加这两个,但想象我有在范围 – kwicher

+0

耶的数十列耶,这就是我认为... – Sotos

回答

2

我觉得最dplyr -esque的办法是:

df %>% 
    filter(rowSums(select_(., 'A2:B1')) > 10) 

其中给出:

# txt A1 A2 B1 B2 
#1 ala 6 9 12 23 
+0

还有一个问题。是否可能没有小费? – kwicher

+1

@kwicher试试'filter(df,rowSums(select_(df,'A2:B1'))> 10)' –

+1

Surly,谢谢。完美的作品。 – kwicher

1

您需要先拿到指标,然后用rowSums

library(dplyr) 
which(names(df) == 'A2') #find first column 
#[1] 3 
which(names(df) == 'B1') #find last column 
#[1] 4 
filter(df, rowSums(df[,3:4])>10) 
# txt A1 A2 B1 B2 
#1 ala 6 9 12 23