我正在尝试根据现有列中显示的值创建新列(变量),这样如果现有列中有NA,则新列中的对应值应为0(零),如果不是NA那么它应该是1(一)。下面给出了一个示例数据:
aid=c(1,2,3,4,5,6,7,8,9,10)
age=c(2,14,NA,0,NA,1,6,9,NA,15)
data=data.frame(aid,age)
我的新数据框应如下所示:
aid=c(1,2,3,4,5,6,7,8,9,10)
age=c(2,14,NA,0,NA,1,6,9,NA,15)
surv=c(1,1,0,1,0,1,1,1,0,1)
data<-data.frame(aid,age,surv)
data
我希望我的问题足够明确。
R社区的帮助非常感谢!
巴兹
答案 0 :(得分:8)
surv = 1 - is.na(age)
<小时/>
> data
aid age surv
1 1 2 1
2 2 14 1
3 3 NA 0
4 4 0 1
5 5 NA 0
6 6 1 1
7 7 6 1
8 8 9 1
9 9 NA 0
10 10 15 1
>
答案 1 :(得分:6)
如果我理解正确:
data$surv <- 1
data$surv[is.na(data$age)] <- 0
或
data$surv <- ifelse(is.na(data$age), 0, 1)
答案 2 :(得分:3)
@ mod 1-is.na(foo)
解决方案的替代方案是,只需将TRUE
/ FALSE
与!
反转,然后调用as.numeric()
。这涉及更多的打字,但对数字的意图和明确的强制是显而易见的。
> as.numeric(!is.na(c(2,14,NA,0,NA,1,6,9,NA,15)))
[1] 1 1 0 1 0 1 1 1 0 1