如何在dplyr :: mutate中使combn工作?

时间:2019-04-14 16:55:18

标签: r dplyr

我正在尝试使combn()dplyr::mutate中工作,但是我失败了,无法完全弄清楚为什么。

这有效:

c("a", "b", "c") %>% combn(2, FUN = paste, collapse = ";", simplify = TRUE)
[1] "a;b" "a;c" "b;c"

但是我该如何做呢?

tribble(
  ~col, 
  c("a", "b", "c"), 
  c("a", "d", "f")
) %>% 
  mutate(col = combn(str_split(names, ";"), 2, FUN = paste, collapse = ";")) 

我希望矩阵中的每一行都是这种形式的字符向量:

[1] "a;b" "a;c" "b;c"

上面的示例将是第一行。

编辑:如果不使用combn(),我想很好。

2 个答案:

答案 0 :(得分:2)

我们可以使用map来遍历listpaste

library(tidyverse)
out <- tribble(
    ~col, 
     c("a", "b", "c"), 
     c("a", "d", "f")
   ) %>% 
      mutate(col = map(col, ~ combn(.x, 2, FUN = paste, collapse=";"))) 

答案 1 :(得分:1)

尝试:

  tribble(
      ~col,
      c("a", "b", "c"),
      c("a", "d", "f")
    ) %>%
      rowwise() %>%
      mutate(new = toString(combn(col, 2, FUN = paste, collapse = ";")))