r - 将列表中的项目与 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
我该怎么做呢?谢谢!
解决方案
这是一种使用布尔求和和%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
推荐阅读
- django - 如何在 Django Rest Framework 中使用 JWT 令牌?
- java - Java-如何在java中编写渐变文本?
- excel - 在单元格内进行多次搜索,如果找到则偏移结果
- amazon-web-services - 查看子网中的所有资源/查看子网是否正在使用中
- django - pipenv 与用户一起进行生产解决方法,它可行吗?
- c - 从函数返回 NULL 的指针数组
- c# - 环境上下文范围 WCF 实例提供程序
- android - 奥利奥后台服务限制START_STICKY问题
- node.js - 通过用户身份验证(Node/Vue/Passport)防止中间人攻击
- python - 格式化缺少元素的字符串 - Python