我试图基于逻辑语句为另一列的值创建一列“完成”。该列名为“ etc001_processed”,其中包含一个人完成的测试数。很多人根本没有完成“ etc001”测试,因此有很多NA。我想要创建“完成”列:
> print(dat_de$etc001_processed)
[1] NA NA NA NA 12 NA NA NA NA NA NA 12 NA 9 NA 12 7 NA 12 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 12 12 NA NA NA 12 NA NA NA NA
[44] 12 12 NA 12 NA 12 NA NA 12 12 NA 12 NA 12 NA NA 12
谢谢!
答案 0 :(得分:0)
您可以通过分别ifelse
嵌套case_when
或dplyr
来指定每个条件,但是在这种情况下,您可以直接执行
dat_de$complete <- as.integer(dat_de$etc001_processed == 12)
dat_de
# temp etc001_processed complete
#1 1 NA NA
#2 2 NA NA
#3 3 NA NA
#4 4 NA NA
#5 5 12 1
#6 6 NA NA
#7 7 NA NA
#8 8 NA NA
#9 9 NA NA
#10 10 NA NA
#11 11 12 1
#12 12 NA NA
#13 13 9 0
#14 14 NA NA
#15 15 12 1
#16 16 7 0
数据
dat_de <- data.frame(temp = 1:16, etc001_processed = c(NA, NA, NA, NA, 12,
NA, NA, NA, NA, NA,12, NA, 9 ,NA, 12, 7))
答案 1 :(得分:0)
如果您想使用if-else
语句,我想推荐ifelse()
,即
df <- within(df, complete <- ifelse(etc001_processed==12,1,
ifelse(is.na(etc001_processed),NA,0)))
带有虚拟数据的示例
df <- data.frame(etc001_processed = c(NA, 3, NA, NA, 12, NA, 5, NA, 6, NA,12, NA, 8 ,9, NA, 1))
df <- within(df, complete <- ifelse(etc001_processed==12,1,
ifelse(is.na(etc001_processed),NA,0)))
给出
> df
etc001_processed complete
1 NA NA
2 3 0
3 NA NA
4 NA NA
5 12 1
6 NA NA
7 5 0
8 NA NA
9 6 0
10 NA NA
11 12 1
12 NA NA
13 8 0
14 9 0
15 NA NA
16 1 0