r - dplyr 用良好值的函数替换新列中的 NA
问题描述
最小示例:一个包含 6 行和 2 列对问题的回答以及一列 ID 的小型数据框
df <- data.frame(ID = c(rep("A", 3), rep("B", 2), "C"),
Q1 = sample(0:5, 10, replace=T),
Q2 = sample(0:3, 10, replace=T)
)
我需要按 ID 创建一个具有 Q1 和 Q2 标准差的新数据框,所以写
questions <- c("Q1", "Q2")
df_sigma <- df %>%
group_by(ID) %>%
summarize(across(all_of(questions),
.fns = sd,
.names = paste0("Sigma_", "{.col}")))
这给了我
df_sigma
# A tibble: 3 x 3
ID Sigma_Q1 Sigma_Q2
<chr> <dbl> <dbl>
1 A 1.73 0.577
2 B 2.12 1.41
3 C NA NA
用户 C 的 Q1 和 Q2 的标准差是 NA,因为它应该是 - 用户 C 只有一个条目。如何将每列中的 NA 替换为同一列中所有其他值的平均值或中值,例如, df_sigma[3, "Sigma_Q1"] = median(df_sigma[1, "Sigma_Q1"] , df_sigma[2, "Sigma_Q1"]) 和 Sigma_Q2 类似?一般来说,会有多个问题和相当多的NAs随机散布在列中。
提前谢谢了
托马斯飞利浦
解决方案
我们可以mutate
使用replace
library(dplyr)
df_sigma2 <- df_sigma %>%
mutate(across(starts_with("Sigma"),
~ replace(., is.na(.), median(., na.rm = TRUE))))
推荐阅读
- java - 无法填充 ListView 未调用 getView
- python - 用空格替换名称之间的制表符
- ios - Spritekit 和 swift - 如何在测试期间从测试人员那里取回数据
- mongoose - 是否可以自定义猫鼬中的错误?
- javascript - js直播搜索模式
- java - 如何使用 Mybatis 和 PostgreSQL 创建一个空数组?
- c++ - 通过 Boost Python 在 C++ 对象之间传递共享指针的 Segfault
- java - 为什么我们在 Hibernate 配置或映射文件中写入标签
- javascript - DarkSky API - 未处理的拒绝错误 - ReactJS / Axios / Node.js
- scala - 如何从 Spark 数据框中的数组中获取统计信息?