2016-06-10 19 views
2

let Referenzierung sagen, dass ich einen Datenrahmen df wie dieR: eine Reihe von Säulen in dplyr

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

habe ich dplyr zum Filtern der Zeilen auf einer Summe von einer Reihe von Variablen basierten verwenden mag. Ich habe versucht:

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

.... aber es funktioniert nicht.

Kann jemand eine Lösung in dplyr vorschlagen? Und ja, ich weiß, dass es durch einfaches Subsetting anders gemacht werden kann.

+0

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

+0

Ich weiß in diesem speziellen Fall können Sie einfach die beiden hinzufügen, aber stellen Sie sich vor, ich habe Dutzende von Spalten im Bereich – kwicher

+0

ja, das ist, was ich dachte ... – Sotos

Antwort

2

ich denke, die meisten dplyr -esque Weg wäre:

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

Welche gibt:

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

Noch eine Frage. Ist es möglich, ohne zu kippen? – kwicher

+1

@kwicher Try 'Filter (df, rowSums (select_ (df, 'A2: B1'))> 10)' –

+1

Surly, danke. Funktioniert perfekt. – kwicher

1

Sie müssen die Indizes zunächst erhalten und rowSums dann verwenden,

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