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 来做到这一点,但我不太擅长循环。
提前致谢。
你可以做:
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)