如何使用根据向量评估值的条件生成新列?

est*_*ban 2 loops r dataframe recode

假设我有这个专栏。

dataframe$column<-c(1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9, NA, NA, 0)

我得到了这个向量

vector<- c(1, 5, 9)

我需要在数据框中创建一个新列,当任何给定行中的值等于向量的任何值时,该列将返回 0。如果不相等,我想返回 0,如果该列最初有 NA,我也想返回 NA。

因此,在我的示例中,新列应如下所示:

[1] 1 0 0 0 0 0 0 1 1 1 0 0 0 1 NA NA 0

我很确定我可以使用 apply 或 sapply 来做到这一点,但我不太擅长循环。

提前致谢。

des*_*hen 5

你可以做:

library(tidyverse)

dataframe <- data.frame(column = c(1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9, NA, NA, 0))

vector<- c(1, 5, 9)

dataframe %>%
  mutate(new_column = case_when(is.na(column) ~ NA_real_,
                                column %in% vector ~ 1,
                                TRUE ~ 0))

   column new_column
1       1          1
2       2          0
3       2          0
4       2          0
5       3          0
6       4          0
7       4          0
8       5          1
9       5          1
10      5          1
11      6          0
12      7          0
13      8          0
14      9          1
15     NA         NA
16     NA         NA
17      0          0
Run Code Online (Sandbox Code Playgroud)