在dplyr do函数中尝试inner_join

时间:2019-03-08 10:36:48

标签: r dplyr

我正在使用dplyr::do计算一些值,但是我想将一些数据加入其中。

df2 <- data.frame(cat=c('a','a','b'),
                  cl=1,
                  id=c('A','B','C'))
df1 <- data.frame(cat=c('a','b'),
                 cl=1)
df1 %>%
  group_by(cat, cl) %>%
  do(ids=paste(. %>%
                 inner_join(df2) %>%
                 dplyr::select(id) %>%
                 unlist(), collapse=';'))

我遇到错误

  

as.vector(x,“ character”)中的错误:     无法将类型'closure'强制转换为类型'character'的向量

有人知道如何解决这个问题或究竟是什么问题吗?

2 个答案:

答案 0 :(得分:3)

问题是使用点作为管道运算符的左侧,%>%的文档指出:

  

将点占位符用作lhs   当将点用作lhs时,结果将是一个功能序列,即,将整个右侧链依次应用于其输入的函数。请参阅示例。

他们甚至提供了一个例子:

# Building unary functions with %>%
trig_fest <- . %>% tan %>% cos %>% sin

因此,基本上,您要提供一个功能作为paste的输入

答案 1 :(得分:1)

尝试一下:

df1 %>%
  group_by(cat, cl) %>%
  do(ids=paste(  inner_join(.,df2) %>%
                 dplyr::pull(id), collapse=';'))

不确定确切为什么会起作用,但是确实可以。