我有一个包含两列的数据集,我想将它们合并为一个列。
这里是一个例子:
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")))
我尝试过,如果没有运气的话。
答案 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)