у меня есть фрейм данных с двумя колонками с разделителями строк:Нахождение строк разделяют между двумя dataframe колоннами
df <- data.frame('a'=c('a, b, c, d', 'a, c', 'b, d'), 'b'=c('a, d', 'a', 'a, d'))
a b
1 a, b, c, d a, d
2 a, c a
3 b, d a, d
И я хотел бы создать третий столбец, чтобы включить строки, пересекающие первые две колонки, для пример:
a b c
1 a, b, c, d a, d a, d
2 a, c a a
3 b, d a, d d
Я попробовал несколько подходов, которые включают преобразование строки в списки и обратно, но я, кажется, не быть в состоянии получить это право.
Использование dplyr
я впервые попытался использовать:
df <- df %>%
mutate(c=paste(c(intersect(unlist(strsplit(a, split=", ")), unlist(strsplit(b, split=", "))))))
что привело к ошибке:
Error in eval(substitute(expr), envir, enclos) : wrong result size (2), expected 3 or 1
А также не возвращает требуемую строку, это также, кажется, возвращают результаты одного и того же размера для каждой строки (подтверждено путем изменения функции mutate
выше от paste
до length
ниже):
df %>%
mutate(c=length(c(intersect(unlist(strsplit(a, split=", ")), unlist(strsplit(b, split=", "))))))
a b c
1 a, b, c, d a, d 2
2 a, c a 2
3 b, d a, d 2
Это заставляет меня беспокоиться, что все результаты моих строк объединяются в один результат и повторяются.
Чтобы попытаться упростить вещи я попытался преобразовать мои строки в списках перед использованием функции пересекаться:
df %>% mutate(a_list=list(unlist(strsplit(a, split=", "))))
Но получил ошибку:
Error in eval(substitute(expr), envir, enclos) : not compatible with STRSXP
что делает удивительно, если списки в кадрах данных совместимы с tidyverse
и, как таковой, если мне нужно использовать совершенно другой подход.
Любые советы о том, как подойти к проблеме поиска строк, разделяемых между двумя столбцами фрейма данных в R (а также любое представление о том, как обрабатывать список, как значения в кадрах данных), будут с благодарностью получены.
Это здорово, спасибо, я, возможно, немного более заинтересован в использовании dplyr. – MrGraeme