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

How do I generate a new column using a conditional which evaluates values against a vector?

假设我有这个专栏。

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)

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

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

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

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

提前致谢。

尝试%in%

> replace(+(x %in% v), is.na(x), NA)
 [1]  1  0  0  0  0  0  0  1  1  1  0  0  0  1 NA NA  0

outer + rowSums

> +(rowSums(outer(x, v, `==`)) > 0)
 [1]  1  0  0  0  0  0  0  1  1  1  0  0  0  1 NA NA  0

数据

x <- c(1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9, NA, NA, 0)
v <- c(1, 5, 9)

你可以这样做:

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