gpt4 book ai didi

r - 使用 dplyr 按组更改变量值

转载 作者:行者123 更新时间:2023-12-01 00:57:50 24 4
gpt4 key购买 nike

我的问题是我想将所有缺失值更改为多列的每个组的平均值。我想用dplyr但它对我不起作用

例如

iris2 <- iris
set.seed(1)
iris2[-5] <- lapply(iris2[-5], function(x) {
x[sample(length(x), sample(10, 1))] <- NA
x
})

impute_missing=function(x){
x[is.na(x)]=mean(x,na.rm=TRUE)
return(x)
}

iris2 %>% groupby (Species) %>% sapply(impute_missing)

然而,代码并没有通过物种来估算缺失,而是通过每列的所有非缺失值的平均值来估算缺失。另一个奇怪的瘦是该功能也应用于 Species组变量。有没有办法按物种估算平均值并保持完整的数据框/

最佳答案

尝试:

 library(dplyr)
iris2New <- iris2 %>%
group_by(Species) %>%
mutate_each(funs(mean=mean(., na.rm=TRUE)), contains("."))

iris2[,-5][is.na(iris2)[,-5]] <- iris2New[,-5][is.na(iris2)[,-5]]

iris2

或者,您可以使用 ifelse在初始数据集 iris2
  fun1 <- function(x) ifelse(is.na(x), mean(x, na.rm=TRUE), x)
iris3 <- iris2 %>%
group_by(Species) %>%
mutate_each(funs(fun1), contains(".") )

identical(as.data.frame(iris3), iris2)
#[1] TRUE

或者,代替 function , 您可以使用
 iris4 <-  iris2 %>% 
group_by(Species) %>%
mutate_each(funs(ifelse(is.na(.), mean(., na.rm=TRUE), .)), contains(".") )


identical(iris3,iris4)
#[1] TRUE

关于r - 使用 dplyr 按组更改变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com