R-在创建具有列名的新变量时合并数据帧



我使用dplyr::coalescedplyr::mutate来查找所有第一个不丢失的值,并将其填充到一个新变量中。但是,我也想创建一个新的变量,其中包含用于填充新变量的变量的信息。

这里有一个例子:

df <- dataframe(
St1 = c(1, NA, NA, NA),
St2 = c(NA, 3, NA, NA), 
St3 = c(NA, NA, 12, NA),       
St4 = c(NA, NA, NA, 4))
What I do : 
df <- df %>%
mutate(df.coalesce = coalesce(St1, St2, St3, St4)) %>%
select(df.coalesce)
Result: 
df.coalesce
1
3
12
4
Desired result: 
Station df.coalesce
St.1    1
St.2    3
St.3    12
St.4    4   

有没有一种方法可以用最新的语法做到这一点?

谢谢!

您可以使用max.col获取每行中具有非NA值的列名,并使用do.callcoalesce将其应用于所有列。

library(dplyr)
df %>%
transmute(Station = names(df)[max.col(replace(., is.na(.), 0))], 
df.coalesce = do.call(coalesce, .))
#  Station df.coalesce
#1     St1           1
#2     St2           3
#3     St3          12
#4     St4           4

您可以找到所有具有NA的id,然后将其删除。

train <- read.csv (file = "file", sep = ",", na.strings=c("NA"))
id_na_Cols <- sapply(train,function(x)any(is.na(x)))
trainData <- train[,!(id_na_Cols)]
write.table (trainData, file = "file_new", sep = ",")

之后,您可以加载新数据以进行进一步分析。

最新更新