вы можете сделать это с помощью 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)))