r - 用分组变量中的值替换 NA
问题描述
假数据
fruit <- c("Orange", "Banana", "Orange", "Banana")
flavour <- c("Bitter", NA, NA, "Sweet")
geo <- c(NA, NA, NA, "France")
value <- c(1, NA, NA, 4)
dd <- data.frame(fruit, flavour, geo, value)
rm(fruit, flavour, geo, value)
我想按“水果”对数据集进行分组,并将所有变量中的缺失值替换为分组数据中存在的值。
期望的输出
fruit <- c("Orange", "Banana", "Orange", "Banana")
flavour <- c("Bitter", "Sweet", "Bitter", "Sweet")
geo <- c(NA, "France", NA, "France")
value <- c(1, 4, 1, 4)
dd2 <- data.frame(fruit, flavour, geo, value)
rm(fruit, flavour, geo, value)
代码尝试
tt <- dd %>%
group_by(fruit) %>%
summarise_all()
解决方案
我们需要mutate_all
在group_by
(summarise/summarise_all
用于从多行中获取单行) 之后。使用na.locf
fromzoo
用每列的相邻非 NA 元素填充 NA 元素
library(zoo)
library(dplyr)
dd %>%
group_by(fruit) %>%
mutate_all(funs(na.locf(na.locf(., na.rm = FALSE),
fromLast = TRUE, na.rm = FALSE)))
# A tibble: 4 x 4
# Groups: fruit [2]
# fruit flavour geo value
# <fct> <fct> <fct> <dbl>
#1 Orange Bitter <NA> 1
#2 Banana Sweet France 4
#3 Orange Bitter <NA> 1
#4 Banana Sweet France 4
推荐阅读
- reactjs - 如何使用带有 TypeScript 的 Redux Tool Kit 'mutations':“类型上不存在属性 'push'”
- typescript - 为什么函数重载可以解决类型缩小问题?
- php - 带有 Laravel 应用程序的自包含 Docker 映像(无共享卷)
- ansible - Ansible 用于在首次登录时更改密码的休息密码处理程序
- php - 找不到codeigniter页面404
- java - 在记忆图像游戏Java中隐藏单击的按钮并显示图像
- python - Pandas:通过选择值将两个具有相同列的数据框组合起来
- android - 如何检测和选择用户所在国家?
- python - 提高贝叶斯因果网络的预测精度
- python - 我如何使用列表理解优化此代码?