将 NA by row 替换为行平均值

标签 r mean

我有以下数据框:

i1<-c(5,4,3,4,5)
i2<-c(4,NA,NA,5,3)
i3<-c(NA,4,4,4,5)
i4<-c(3,5,5,NA,2)
dat<-as.data.frame(cbind(i1,i2,i3,i4))
dat
  i1 i2 i3 i4
1  5  4 NA  3
2  4 NA  4  5
3  3 NA  4  5
4  4  5  4 NA
5  5  3  5  2

我的目标是将 NA 替换为要获取的行:

> dat
   i1     i2 i3     i4
1  5 4.0000  4 3.0000
2  4 4.3333  4 5.0000
3  3 4.0000  4 5.0000
4  4 5.0000  4 4.3333
5  5 3.0000  5 2.0000

我目前有以下代码:

dat1<- which(is.na(dat), arr.ind=TRUE)
dat[dat1] <- rowMeans(dat, na.rm=TRUE)[dat1[,1]]

这确实产生了期望的结果;但是,我只是想知道是否有更好的方法来做到这一点,并且保留行和列名称(行将在最终产品中具有名称)。谢谢。

最佳答案

尝试

(is.na(dat))*rowMeans(dat, na.rm=TRUE)[row(dat)] + replace(dat, is.na(dat), 0)
#  i1       i2 i3       i4
#1  5 4.000000  4 3.000000
#2  4 4.333333  4 5.000000
#3  3 4.000000  4 5.000000
#4  4 5.000000  4 4.333333
#5  5 3.000000  5 2.000000

关于将 NA by row 替换为行平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548546/

相关文章:

r - 转换覆盖图中轨迹的距离

r - 与 Reactable 结合使用时,串扰会使滚动条在 FlexDashboard 中不可见

r - 使用 ggplot2 仅将一个轴转换为 log10 刻度

node.js - 如何用 Mongoose 对两个字段进行排序?

python - 计算行条目以调整不同的列,Pandas

java - 如何将平均值放入 arrayList 中,以及如何将输入文件中的分数放入自己的 arrayList 中?

r - 按顶点名称的边序列

r - 为矩阵中的某些相关性在 R 中生成图形

node.js - 在 MEANJS 的 CRUD 中的 URL 中使用 slugs

R - 基于日期列使用 group_by 进行平均计算?