I'm new to dplyr and cannot figure out how to control the variables to pass through a chaining (%>%) command. Simple example: the str_sub function takes three arguments - the first is passed on through %>% but how can I get the last two? :
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 R I could do:
with(df, str_sub(V1, V2, V3))
and get:
## [1] "ED" "E"  "EF" "E" 
How to chain this ? - I tried:
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
                You can do the following:
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
Note that dplyr is made for working with data.frames, so input and output should be data.frames, not atomic vectors.
One could also do:
df %>% with(str_sub(V1, V2, V3))
as you want a vector anyway. But now we're back in nested land.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With