首页 > 解决方案 > 检查一列中所有行的值是否在列表中,返回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.  

标签: rlistdataframerecode

解决方案


df[['occupation2']] <- as.integer(df[['occupation']] %in% value_list)应该管用。%in%是这项工作的完美操作员。它返回一个logical(TRUE/FALSE) 向量,该向量将通过 转换为 1/0 as.integer()

(此外,当从数据框中提取单个列时,使用data[, column]data[[column]]直接访问该列 -data[column]将提供 1 列数据框,而不仅仅是列)


推荐阅读