【问题标题】:Trying an inner_join within a dplyr do function在 dplyr do 函数中尝试 inner_join
【发布时间】:2019-03-08 10:36:48
【问题描述】:

我正在使用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") 中的错误: 无法将类型“闭包”强制转换为“字符”类型的向量

有谁知道如何解决这个问题或问题到底出在哪里?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

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

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

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

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

    所以基本上你提供了一个函数作为paste的输入

    【讨论】:

    • 感谢解释,可能忽略了!还有@Rohit在他的回答中给出的例子,它最终起作用了。
    【解决方案2】:

    试试这个:

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

    不知道为什么它会起作用,但确实如此。

    【讨论】:

    • (.) %&gt;% inner_join(df2) ...
    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2015-08-11
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多