Как я могу заставить работать combn в dplyr :: mutate? - PullRequest
2 голосов
/ 14 апреля 2019

Я пытаюсь заставить 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 ]

2 голосов
/ 14 апреля 2019

Мы могли бы использовать map для циклического перебора list и paste

library(tidyverse)
out <- tribble(
    ~col, 
     c("a", "b", "c"), 
     c("a", "d", "f")
   ) %>% 
      mutate(col = map(col, ~ combn(.x, 2, FUN = paste, collapse=";"))) 
1 голос
/ 14 апреля 2019

Попробуйте:

  tribble(
      ~col,
      c("a", "b", "c"),
      c("a", "d", "f")
    ) %>%
      rowwise() %>%
      mutate(new = toString(combn(col, 2, FUN = paste, collapse = ";")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...