我使用dplyr::coalesce
和dplyr::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.call
和coalesce
将其应用于所有列。
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 = ",")
之后,您可以加载新数据以进行进一步分析。