2017-07-11 5 views
0

Ich bin mit einem df beginnen, die wie folgt aussieht:Dplyr wählen ends_with

sample_id  target_id length  eff_length est_counts tpm class 
1 SRR3884838C  (A)n  69   70   0  0.00000  0 
2 SRR3884838C  (AC)n  69   70   0  0.00000  0 
3 SRR3884838C  (AG)n  69   70   0  0.00000  0 
4 SRR3884838C  (AT)n  69   70   5  15.98870 0 

würde Ich mag dplyr Select-Funktion verwenden nur sample_ids auszuwählen, die mit dem Buchstaben C zu beenden, sowie die target_id und tpm.

Beispieldaten:

> dput(droplevels(head(te,4))) 
structure(list(sample_id = structure(c(1L, 1L, 1L, 1L), .Label = "SRR3884838C", class = "factor"), 
target_id = structure(1:4, .Label = c("(A)n", "(AC)n", "(AG)n", 
"(AT)n"), class = "factor"), length = c(69L, 69L, 69L, 69L 
), eff_length = c(70L, 70L, 70L, 70L), est_counts = c(0, 
0, 0, 5), tpm = c(0, 0, 0, 15.9887), class = c(0L, 0L, 0L, 
0L)), .Names = c("sample_id", "target_id", "length", "eff_length", 
"est_counts", "tpm", "class"), row.names = c(NA, 4L), class = "data.frame") 

Ich habe versucht, die folgende Verwendung:

teC <- select(te, (sample_id, ends_with("C")), target_id, tpm) 

die mir die sample_id, target_id und tpm gibt aber wählen nicht nur die sample_id ist, die mit C zB Ende:

 sample_id  target_id tpm 
9759 SRR3884843CxS Tigger15a 0.00000e+00 
9760 SRR3884843CxS Tigger16a 0.00000e+00 
9761 SRR3884843CxS Tigger16b 0.00000e+00 

Mache ich etwas falsch mit Auswahl? Ich war in der Lage, Beispieldaten von einer Tutorial-Site ohne Probleme zu bearbeiten.

+0

Wann würde 'sample_id' jemals mit' "C" enden? Können Sie ein Beispiel geben? – CPak

+0

Der erste Code-Block hat ein Beispiel, das mit C anstelle meiner anderen Enden endet (zB CxS), macht das Sinn? Bitte lassen Sie mich wissen, wenn ich mehr klären muss. – ZincFingers

Antwort

2

select verwendet wird, Variablen zu halten (sprich: Spalten) mit Namen, das ist, was Sie mit sample_id, target_id und tmp tun. Wenn Sie durch die Werte innerhalb sample_id weiter zu filtern wollen, dann filter hinzufügen:

teC <- te %>% select(sample_id, target_id, tpm) %>% filter(grepl("C$", sample_id)) 

Der reguläre Ausdruck "C$" wird Strings übereinstimmen, die mit „C“ zu beenden; "CxS$" wird mit Strings übereinstimmen, die mit "CxS" enden; und "(C|CxS)$" werden beide übereinstimmen.

+0

Ah, ich sehe, was OP jetzt wollte ... – CPak

+0

So kann ich nicht wählen, um bestimmte Namen innerhalb einer Spalte wie hier zu greifen: https://www.r-bloggers.com/the-complete-catalog-of -Argument-Variationen-of-select-in-dplyr/ ich kopieren und Ihre Antwort eingefügt und bekam den Fehler 'Fehler in filter_impl (.data quo): Fehler Auswertung: 'nchar()' erfordert ein Zeichen vector.' Ich bin nicht vertraut mit der Verwendung von%>%, so dass ich das herausfinden muss. – ZincFingers

+0

Eigentlich ist das im Moment falsch - 'endswith' ist eine" Helfer "-Funktion für' select' (um Spalten mit bestimmten Namen zu finden) - Ich werde diese Antwort aktualisieren, um Strings in 'sample_id' korrekt zu finden – cmaher