Разница между двумя столбцами с разделенными переменными по;в R - PullRequest
0 голосов
/ 10 октября 2018

Я новичок в R и, пытаясь сделать несколько упражнений, застрял в одном из них.Мой data.frame выглядит следующим образом:

LanguageWorkedNow LanguageNextYear Java; PHP Java; C++; SQL C;C++;JavaScript; JavaScript; C; SQL

И мне нужно знать переменные, которые находятся в LanguageNextYear, а не в LanguageWorkedNow, чтобы создать список сразные.

Извините, если вопрос дублируется, я здесь новенький и пытался его найти, но безуспешно.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

base R

Идея: mapply setdiff on strsplit ted NextYear и WorkedNow, а затем вставьте его, используя collapse=";":

df$New <- with(df, {
  a <- mapply(setdiff, strsplit(NextYear, ";"), strsplit(WorkedNow, ";"), SIMPLIFY = FALSE)
  sapply(a, paste, collapse=";")
})
# SIMPLIFY = FALSE is needed in a general case, it doesn't
# affect the output in the example case
# Or if you use Map instead of mapply, that is the default, so
# it could also be...

df$New <- with(df, 
  sapply(Map(setdiff, strsplit(NextYear, ";"), strsplit(WorkedNow, ";")), 
     paste, collapse=";"))

data

df <- read.table(text = "WorkedNow      NextYear
                Java;PHP              Java;C++;SQL  
                C;C++;JavaScript      JavaScript;C;SQL
                ", header=TRUE, stringsAsFactors=FALSE)
0 голосов
/ 10 октября 2018

Вот решение с использованием пакета purrr:

df = read.table(text = "
LanguageWorkedNow      LanguageNextYear
Java;PHP              Java;C++;SQL  
C;C++;JavaScript      JavaScript;C;SQL
", header=T, stringsAsFactors=F)

library(purrr)

df$New = map2_chr(df$LanguageWorkedNow, 
                  df$LanguageNextYear, 
                  ~{x1 = unlist(strsplit(.x, split=";"))
                    x2 = unlist(strsplit(.y, split=";"))
                    paste0(x2[!x2%in%x1], collapse = ";")})

df

#   LanguageWorkedNow LanguageNextYear     New
# 1          Java;PHP     Java;C++;SQL C++;SQL
# 2  C;C++;JavaScript JavaScript;C;SQL     SQL

Для каждой строки вы получаете столбцы и создаете векторы значений (разделенные ;).Затем вы проверяете, какие значения NextYear вектора не существуют в WorkedNow векторе, и создаете строку, основанную на / комбинировании этих значений.

Семейство функций map поможет вам применить вашу логику /функция для каждого ряда.В нашем случае мы используем map2_chr, поскольку у нас есть два входа (два ваших столбца), и мы исключаем строку / символьный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...