我有一个大数据集,其中包含几个缺失(NA)值。每个品种有3个重复。所以,如果我丢失了1,我可以把其他的2平均起来,用它来替换丢失的1。或者,如果只有一个已知的价值,使用它代替其他。我不知道从哪里开始,但我找到了一个简单的话题,但它适合python (理解https://stackoverflow.com/questions/29359134/in-pandas-how-can-i-patch-a-dataframe-with-missing-values-with-values-from-anot)
下面是一个数据框架示例:
A <- c(1, 1, 1, 5, 5, 5, 8, 8, 8)
B <- c(10, 20, 50, 100, 100, 50, 200, 300)
C <- c(10, 10, 10, 50, 50, 50, 100)
length(A)<-9; length(B)<-9; length(C)<-9
df <-cbind(A,B,C) 这个想法是用A细胞中的8组B细胞的平均值来填充NA。在C细胞中,NA应由A细胞中仅有的8填充。在真实的数据集中,会有更多的NA组,我只是不知道如何制作这样的df :D
这似乎是一个简单的任务,我只是没有编码知识来解决这个问题。
提前感谢!
发布于 2022-09-26 13:15:50
我觉得这应该能起作用。请注意,我事先将您的数据转换为数据帧对象。
A <- c(1, 1, 1, 5, 5, 5, 8, 8, 8)
B <- c(10, 20, 50, 100, 100, 50, 200, 300)
C <- c(10, 10, 10, 50, 50, 50, 100)
length(A)<-9; length(B)<-9; length(C)<-9
df <- data.frame(A,B,C)
library(dplyr)
newdf <- df %>% group_by(A) %>% mutate_all( ~ case_when(is.na(.) ~ mean(., na.rm=TRUE),
TRUE ~ .))mutate_all意味着将对所有列执行操作。如果您只想对某些列执行此操作,则使用mutate_at代替。
发布于 2022-09-26 13:17:49
library(tidyverse)
df %>%
group_by(A) %>%
mutate(across(everything(), ~ replace_na(.x, mean(.x, na.rm = TRUE))))
# A tibble: 9 × 3
# Groups: A [3]
A B C
<dbl> <dbl> <dbl>
1 1 10 10
2 1 20 10
3 1 50 10
4 5 100 50
5 5 100 50
6 5 50 50
7 8 200 100
8 8 300 100
9 8 250 100https://stackoverflow.com/questions/73854505
复制相似问题