2014-11-03 18 views
5

Sono nuovo a dplyr e non riesco a capire come controllare le variabili per passare attraverso un concatenamento (%>%) comando. Semplice esempio: la funzione str_sub accetta tre argomenti: il primo viene trasmesso tramite %>% ma come posso ottenere gli ultimi due? :dplyr: utilizzare il concatenamento per passare le variabili

library(stringr) 
library(dplyr) 
df <- data.frame(V1 = c("ABBEDHH", "DEFGH", "EFGF", "EEFD"), 
       V2=c(4, 2, 1, 1), V3=c(5, 2, 2, 1), stringsAsFactors=FALSE) 

In base di R che potevo fare:

with(df, str_sub(V1, V2, V3)) 

e ottenere:

## [1] "ED" "E" "EF" "E" 

Come catena di questo? - Ho provato:

df %>% str_sub(V1, V2, V3) # Here V3 is unused arg since V1 is treated as 2nd arg 

df %>% select(V1) %>% str_sub(V2, V3) # Here V2 and V3 are not recognized 

risposta

5

È possibile effettuare le seguenti operazioni:

library(dplyr) 
library(stringr) 
library(lazyeval) 

df %>% mutate(new = str_sub(V1, V2, V3)) 
#  V1 V2 V3 new 
#1 ABBEDHH 4 5 ED 
#2 DEFGH 2 2 E 
#3 EFGF 1 2 EF 
#4 EEFD 1 1 E 

noti che dplyr è fatto per lavorare con data.frame s, in modo da ingresso e l'uscita dovrebbe essere data.frames, non vettori atomiche.

+0

(+1) Bello uno ... –

+0

Perfetto! Per il mio bisogno aggiungerei df%>% mutate (nuovo = str_sub (V1, V2, V3))%>% select (nuovo) – user3375672

+0

@ user3375672, sì, puoi farlo, ma nota che funziona perché il risultato è ancora un data.frame (con solo 1 colonna), non un vettore atomico. –

1

Si potrebbe anche fare:

df %>% with(str_sub(V1, V2, V3)) 

come si desidera un vettore in ogni caso. Ma ora siamo tornati nella terra nidificata.