首页 > 解决方案 > 将列表中的项目与 R 中的数据集进行比较

问题描述

我有一个大型数据集(8,000 obs)和大约 16 个列表,其中包含 120 到 2,000 个项目。本质上,我想检查数据集中的任何观察是否与列表中的项目匹配。如果有匹配,我想包含一个表示匹配的变量。

例如,如果我有如下所示的数据:

dat <- as.data.frame(1:10)
list1 <- c(2:4)
list2 <- c(7,8)

我想以一个看起来像这样的数据集结束

Obs  Var  List
1    1    
2    2    1
3    3    1
4    4    1
5    5    
6    6    
7    7    2
8    8    2
9    9    
10   10    

我该怎么做呢?谢谢!

标签: r

解决方案


这是一种使用布尔求和和%in%. 如果有几个匹配,那么最后一个在这里取:

dat <- data.frame(Obs = 1:10)
list_all <- list(c(2:4), c(7,8))
present <- sapply(1:length(list_all), function(n) dat$Obs %in% list_all[[n]]*n)
dat$List <- apply(present, 1, FUN = max)
dat$List[dat$List == 0] <- NA
dat


> dat
   Obs List
1    1   NA
2    2    1
3    3    1
4    4    1
5    5   NA
6    6   NA
7    7    2
8    8    2
9    9   NA
10  10   NA

推荐阅读