如何使用根据向量评估值的条件生成新列?
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
假设我有这个专栏。
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