【发布时间】:2020-06-07 11:43:47
【问题描述】:
我想将一个数据集的数字列替换为相应转换数据集的数字列。我该怎么做(不使用特定于特定数据集的代码)?
例如来自库ggplot2 中mpg 的玩具示例:
mpg0 <- mpg
set.seed(123)
mpg0[sample(nrow(mpg),70,replace=FALSE),3] <- NA
mpg0[sample(nrow(mpg),70,replace=FALSE),8] <- NA
mpg0[sample(nrow(mpg),70,replace=FALSE),9] <- NA
sampled <- sample(nrow(mpg),50,replace=FALSE)
mpg_test <- mpg0[sampled,]
mpg_train <- mpg0[-sampled,]
mpg_mean <- mpg_train %>% group_by(cyl) %>% summarise_if(is.numeric,mean,na.rm=TRUE)
temp1 <- mpg_test %>% left_join(mpg_mean, by = 'cyl')
现在我想将mpg_test 的数字列(列displ、cty、hwy--其他数字列中没有 NA)中的缺失值替换为左连接的相应列。我可以做到这一点
temp1 <- as.data.frame(temp1)
temp1[c(3,8,9)][is.na(temp1[c(3,8,9)])] <- temp1[c(12,14,15)][is.na(temp[c(3,8,9)])]
但这是特定于该数据集的。 mutate_if 的问题是我不知道要放入什么函数。有没有一种很好的通用方法可以做到这一点,即改变数字列以获得平均值,将 NA 替换为对应左侧的同一行中的值- 加入列?
(请仅使用 dplyr)
【问题讨论】: