Делайте setdiff попарно для двух столбцов, которые являются списками символьных векторов - PullRequest
0 голосов
/ 01 октября 2019

У меня есть фрейм данных со столбцом 1, который представляет собой вложенный список векторов символов. Колонка 2 - другой подобный список. Я хотел бы определить столбец 3, в котором элементы каждого символьного вектора присутствуют в столбце 1, но не в столбце 2.

Примерно так:

c1 c2 new c
c('a', 'b') c('b', 'd') 'a'

Я попытался отобразить setdiff:

my.tibble = tibble(
  c1 = list(c('a', 'b'), c('b', 'c')),
  c2 = list(c('d', 'e'), c('e', 'f'))
)

my.tibble = my.tibble %>% 
  mutate(
    new.c = map(c1, ~ setdiff(., c2))
  )

my.tibble$new.c

Он копирует c1 без изменений.

Если я делаю это по строкам, похоже, он запускает setdiff для каждого значения в векторах в c2.

my.tibble = my.tibble %>% 
  rowwise() %>%
  mutate(
    new.c = map(c1, ~ setdiff(., c2))
  )

my.tibble$new.c

Я подозреваюМеня завалила структура списка, но я не знаю, как.

1 Ответ

2 голосов
/ 01 октября 2019

Не лучший пример для совместного использования, поскольку в col1 и col2 нет совпадений, но, думаю, вы ищете map2.

library(dplyr)
library(purrr)

my.tibble %>%  mutate(new.c = map2(c1, c2, setdiff))

или Map в базе R.

my.tibble$new.c <- Map(setdiff, my.tibble$c1, my.tibble$c2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...