我有一个这样的数据集:
Age <- rnorm(n=100, mean=20, sd=5)
ind <- which(Age %in% sample(Age, 50))
Age[ind]<-NA
Age2 <- rnorm(n=100, mean=20, sd=5)
ing <- which(Age2 %in% sample(Age2, 50))
Age2[ing]<-NA
Age3 <- rnorm(n=100, mean=20, sd=5)
int <- which(Age3 %in% sample(Age3, 50))
Age3[int]<-NA
data<-data.frame(Age,Age2,Age3)
它是一个旧的数据集,几个不同的人放在一起,其中多列表示同一件事(实际数据集中有几列表示年龄)。如您所见,有很多NA。我想创建一个统一的“年龄”列。为此,我想理想地使用第一年龄列中的数字,但是如果是NA,则优先使用Age2中的数字,如果也是NA,我将使用Age3,而我d希望以此顺序执行操作(Age3永远不会取代Age2等),因为我相信按此顺序输入数据的人会哈哈。
我知道这里还有其他答案,可以根据几种条件填充列,例如:dplyr replacing na values in a column based on multiple conditions 但是我不确定如何确定优先级。谢谢!
答案 0 :(得分:3)
您可以使用coalesce()
中的dplyr
,它将根据从左到右的第一个非缺失值进行填充。
library(dplyr)
df <-data.frame(Age,Age2,Age3)
df$new_age <- coalesce(!!!df)
head(df)
Age Age2 Age3 new_age
1 17.19762 NA NA 17.19762
2 18.84911 21.17693 NA 18.84911
3 27.79354 NA NA 27.79354
4 NA 15.19072 NA 15.19072
5 NA NA 27.99254 27.99254
6 28.57532 NA 19.55717 28.57532
答案 1 :(得分:1)
base R
的可能性可能是:
apply(data, 1, function(x) x[which(!is.na(x))[1]])