Поиск разделяющих запятой значений в R - PullRequest
0 голосов
/ 05 декабря 2018

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

#DataFrame1
    a=c("AA,BB","BB,CC,FF","CC,DD,GG,FF","GG","")
        df1=as.data.frame(a)

#DataFrame2
x=c("AA","XX","BB","YY","ZZ","MM","YY","CC")
y=c("DD""VV","NN","XX","CC","AA","WW","FF")
z=c("CC","AA","YY","GG","HH","OO","PP","QQ")
df2=as.data.frame(x,y,z)

что мне нужно сделать, это найти, если какой-либо из элементов, давайте возьмем, например, «AA, BB» (который является первой ячейкой в ​​столбце x в df1) «AA» является элементоми «BB» - это другой элемент, который доступен в любом из столбцов (x, y, x) в df2, если найдено совпадение, мне нужно идентифицировать эту строку или строки, также существует возможность более одногосовпадать на df2 строках.Надеюсь, я смог объяснить эту проблему хорошо, эксперт, пожалуйста, помогите

1 Ответ

0 голосов
/ 05 декабря 2018

Вот решение в 2 этапа:

# load tidyverse library(tidyverse)

Шаг 1: Разделить элементы, разделенные запятой от df1, в новый фрейм данных new_df

1a) Для этого мы сначала определяем количество столбцов, которые должны быть сгенерированы (как максимальное количество элементов, разделенных ,; то есть: максимальное число , + 1)

number_new_columns <- max(sapply(df1$a, function(x) str_count(x, ","))) + 1

1b) Создайте новый фрейм данных new_df

    new_df <- df1 %>% 
    separate(a, c(as.character(seq_len(number_new_columns)))) # missing pieces will be filled with NA

    # Above, we used c(as.character(seq_len(number_new_columns))) to generate column names as numbers -- not very creative :)

Шаг 2: Определите положение каждого уникального элемента из new_df в df2 (надеюсь, яправильно понял эту вторую часть вопроса)

2a) Получить уникальные элементы (из new_df)

unique_elements <- unlist(new_df) %>% unique()

2b) Получить список, компоненты которого содержатпозиции каждого уникального элемента в пределах df2

output <- lapply(unique_elements, function(x) {
   which(df2 == x, arr.ind=TRUE)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...