检查一列所有行的值,看是否在列表中,return bool值,无for循环

Check the value of all rows in a column to see if it is in a list, return bool value, without for loop

我有一个名为“occupation”的数据框列,其值为 1、2、3、5、6、7、8、9。我需要构建一个新的数据框列,例如 occupation2。如果旧列中的值属于以下元素之一: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% 是这项工作的完美操作员。它 returns 一个 logical (TRUE/FALSE) 向量,将通过 as.integer().

转换为 1/0

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