5

我是新手,dplyr无法弄清楚如何控制变量通过链接(%>%)命令。简单的例子:str_sub函数接受三个参数——第一个是通过传递的,%>%但我怎样才能得到最后两个?:

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)

在基础 RI 中可以这样做:

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
4

2 回答 2

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.frames 而设计的,因此输入和输出应该是 data.frames,而不是原子向量。

于 2014-11-03T13:51:45.087 回答
1

还可以这样做:

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

因为无论如何你都想要一个向量。但是现在我们又回到了嵌套的土地上。

于 2014-11-03T17:24:56.033 回答