r - 根据值列表有效地检查多个变量的值
问题描述
我想创建一个变量来标记多个变量中的一个或多个是否具有特定值。
week Mon Tues Weds Thurs Fri Sat
1 jon jon jon jon mary mary
2 jane jane jane jane jane jane
3 mary mary mary mary mary jane
我想创建一个二进制变量来标记每周的任何一天 == "jon" 或 "mary" 有没有办法做到这一点,而无需创建一个单独检查每个变量的长 ifelse 语句?
week Mon Tues Weds Thurs Fri Sat flag
1 jon jon jon jon mary mary 1
2 jane jane jane jane jane jane 0
3 mary mary mary mary mary jane 1
解决方案
您可以使用rowSums
:
df$flag <- +(rowSums(df[-1] == 'jon' | df[-1] == 'mary') > 0)
# week Mon Tues Weds Thurs Fri Sat flag
#1 1 jon jon jon jon mary mary 1
#2 2 jane jane jane jane jane jane 0
#3 3 mary mary mary mary mary jane 1
如果您要比较更多值并且无法单独编写每个值,则可以使用以下任何一种方法。
more_values <- c('jon', 'mary')
df$flag <- apply(df[-1], 1, function(x) as.integer(any(x %in% more_values)))
df$flag <- +as.integer(rowSums(sapply(df[-1], `%in%`, more_values)) > 0)
df$flag <- +(Reduce(`|`, lapply(df[-1], `%in%`, more_values)))
推荐阅读
- namespaces - 我可以使用 Apache Drill 查询命名空间中的 hbase 表吗?
- html - 如何为这个 HTML 编写 XPath 和 CSS?
- c# - nHibernate:使用原始查询创建数据库
- php - 如何在插入数据库之前验证数据是否满足特定条件
- javascript - 如何将 0 添加到我的分钟和秒?
- amazon-web-services - 无法从我的 ubuntu EC2 机器连接到 AWS DocumentDB
- javascript - 不懂用函数和参数解析查询字符串
- google-cloud-platform - GCP Dataproc 可以从本地数据库获取数据(或在其上运行其他作业)吗?
- javascript - 为什么相互重叠的 SVG 线条/路径会产生不同的笔触?
- amazon-web-services - CORS 配置问题:在同一个存储桶中,一个文件夹抛出 Access-Control-Allow-Origin 错误,另一个没有