r - 检查一列中所有行的值是否在列表中,返回bool值,不用for循环
问题描述
我有一个名为“职业”的数据框列,其值为 1、2、3、5、6、7、8、9。我需要构建一个新的数据框列,例如职业 2。如果旧列中的值属于以下元素之一:2、3、6、7,则新列中的行将取值 1。否则,行将取 0。在我的真实数据中,“职业”列可以取大约 90 个不同的值。此外,我需要使用大约 10 个不同的值将 1 分配给新列。所以我不想创建大约 10 个不同的条件来分配新值。
我所做的是创建一个包含值的列表,基于该值我可以对新列进行二分法,比如 value_list = c(2, 3, 6, 7)。我也尽量避免使用 for 循环来完成任务。伪代码如下所示:
df$occupation2 <- 0
value_list = c(2, 3, 6, 7)
df['occupation2'] <- 1 where occupation2's value isin value_list.
解决方案
df[['occupation2']] <- as.integer(df[['occupation']] %in% value_list)
应该管用。%in%
是这项工作的完美操作员。它返回一个logical
(TRUE/FALSE) 向量,该向量将通过 转换为 1/0 as.integer()
。
(此外,当从数据框中提取单个列时,使用data[, column]
或data[[column]]
直接访问该列 -data[column]
将提供 1 列数据框,而不仅仅是列)
推荐阅读
- python - 将环境变量设置为从 Bash 脚本调用的 Python 进程
- c# - 使用 C# 以编程方式更改 SOAP 消息内容
- awk - 如何使用 awk 获得结果
- jmeter - 在 jmeter 中,我们如何处理每次运行中生成的编码密码
- batch-file - 将一个 mp3 文件批量复制到其父目录并重命名
- node.js - Node Js 是否使用 libuv 线程池进行网络 I/O
- android - android 8(oreo)中的文本对齐问题 - 在两个单词之间添加了额外的空格
- java - 在编组之前动态隐藏一些字段(java到json)
- linux - 在 Bash 中显示调用堆栈
- ios - 重新选择 UITabBar 项目时防止弹出视图