R: сравнить столбец данных с каждым элементом списка - PullRequest
0 голосов
/ 20 ноября 2018

Кто может мне помочь, пожалуйста?У меня есть датафрейм (df), содержащий различные данные, и у меня есть список (lst), содержащий уникальные значения из df.Например:

[enter image description here]

Мне нужно сравнить каждый элемент в df $ Col1 с первым элементом lst $ Col1, затем со вторым элементом, третьим и т. Д. Затемта же процедура для второго и третьего столбцов.Если сравнение истинно, верните 1, если нет, верните 0.

1 Ответ

0 голосов
/ 20 ноября 2018

вы можете сделать это с помощью apply, который применяется, если вы говорите MARGIN = c(1,2) функцию для каждого элемента матрицы / data.frame.

df <- data.frame(col1 = c(3,2,9,7,7,1,9), 
             col2 = c(3,6,12,7,10,4,6),
             col3 = c(7,3,10,2,2,2,10))

List <- list(col1 = c(1,2,3,7,9), 
         col2 = c(3,4,6,7,10,12), 
         col3 = c(2,3,7,10))

apply(df, MARGIN = c(1,2), function(x) x %in% List[[1]])
apply(df, MARGIN = c(1,2), function(x) x %in% List[[2]])
apply(df, MARGIN = c(1,2), function(x) x %in% List[[3]])

Если вы хотите объединить это, вы можете поместить его в функцию lappy, которая применяет функцию к каждому элементу списка:

lapply(List, function(x) apply(df, MARGIN = c(1,2), function(y) y %in% x))

Вместо TRUE / FALSE выхотел иметь 1/0 в качестве возвращаемого значения.Просто используйте as.numeric() для вашего логического вектора

lapply(List, function(x) apply(df, MARGIN = c(1,2), function(y) as.numeric(y %in% x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...