2014-11-03 36 views
5

我是dplyr的新手,无法确定如何控制变量通过链接(%>%)命令。简单的例子:str_sub函数有三个参数 - 第一个通过%>%传递,但我怎么能得到最后两个? :dplyr:使用链接来传递变量

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) 

在基础R我可以这样做:

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

,并得到:

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

如何链呢? - 我想:

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 

回答

5

你可以做到以下几点:

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 

注意dplyr是与data.frame s工作做,所以输入和输出应该是data.frames,不是原子的载体。

+0

(+1)好的一个... – 2014-11-03 13:53:45

+0

完美!为了我的需要,我会添加df%>%mutate(new = str_sub(V1,V2,V3))%>%select(new) – user3375672 2014-11-03 13:55:19

+0

@ user3375672,是的,您可以这样做,但请注意,仍然是一个data.frame(只有1列),而不是一个原子向量。 – 2014-11-03 14:13:57

1

你也可以这样做:

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

,只要你想一个向量反正。但现在我们又回到了嵌套的土地。