检查一列所有行的值,看是否在列表中,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 列数据框, 而不仅仅是列)
我有一个名为“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()
.
(此外,当从数据框中提取单个列时,使用 data[, column]
或 data[[column]]
直接访问该列 - data[column]
将给出一个 1 列数据框, 而不仅仅是列)