从现有数据添加新列的ifelse语句错误

时间:2018-07-24 16:21:11

标签: r if-statement

我有一个包含两列的数据集,我想将它们合并为一个列。

这里是一个例子:

newdata<-data.frame(Tow.y=c(21,"NA","NA","NA",22,"NA","NA"),Tow=c("NA","NA","NA",21,"NA","NA",22))
newdata$Tow.y<-as.numeric(as.character(newdata$Tow.y))
newdata$Tow<-as.numeric(as.character(newdata$Tow))

newdata
  Tow.y Tow
1    21  NA
2    NA  NA
3    NA  NA
4    NA  21
5    22  NA
6    NA  NA
7    NA  22

我想让另一列从其他两列的每一行中获取非NA值,而将所有其他行的NA保留为NA。

newdata
  Tow.y Tow Station
1    21  NA      21
2    NA  NA      NA
3    NA  NA      NA
4    NA  21      21
5    22  NA      22
6    NA  NA      NA
7    NA  22      22

我认为我可以使用ifelse语句,但是它不起作用。两列中只有一列被添加到新列中。

ifelse语句示例:

newdata$Station<-ifelse(newdata$Tow.y<0 & is.na(newdata$Tow), newdata$Tow.y,
                         ifelse(is.na(newdata$Tow.y) & is.na(newdata$Tow), "NA", ifelse(is.na(newdata$Tow.y) & newdata$Tow<0, newdata$Tow, 
                                       "check")))

我尝试过,如果没有运气的话。

2 个答案:

答案 0 :(得分:4)

我们可以使用coalesce

library(tidyverse)
newdata %>% 
   mutate(Station = coalesce(Tow.y, Tow))
#  Tow.y Tow Station
#1    21  NA      21
#2    NA  NA      NA
#3    NA  NA      NA
#4    NA  21      21
#5    22  NA      22
#6    NA  NA      NA
#7    NA  22      22

答案 1 :(得分:1)

最简单的,仅基于基数的方法是求和并删除NA:

newdata$Station<-sum(newdata$Tow.y, newdata$Tow, na.rm=T)