r - 如果一列是 NA,则使用 dplyR 计算其他列的行平均值
问题描述
在下面的示例中,当 A 列为 NA 时,如何计算行均值?行平均值将替换 A 列中的 NA。使用基数 R,我可以使用它:
foo <- tibble(A = c(3,5,NA,6,NA,7,NA),
B = c(4,5,4,5,6,4,NA),
C = c(6,5,2,8,8,5,NA))
foo
tmp <- rowMeans(foo[,-1],na.rm = TRUE)
foo$A[is.na(foo$A)] <- tmp[is.na(foo$A)]
foo$A[is.nan(foo$A)] <- NA
好奇我如何用 dplyR 做到这一点?
解决方案
您可以使用ifelse
:
library(dplyr)
foo %>%
mutate(A = ifelse(is.na(A), rowMeans(., na.rm = TRUE), A),
A = replace(A, is.nan(A), NA))
# A B C
# <dbl> <dbl> <dbl>
#1 3 4 6
#2 5 5 5
#3 3 4 2
#4 6 5 8
#5 7 6 8
#6 7 4 5
#7 NA NA NA
推荐阅读
- javascript - 防止在控制台中编辑js
- python - “导入不和谐”在 Python 3.5 中不起作用
- python - 用于时间的 Python 库,对持续时间计算的小时数没有限制
- ag-grid - ag-grid resetRowHeights 不起作用
- mongodb - mongodb 检查另一个数组中的字符串数组并添加状态字段
- erlang - 从 ERLANG 中的 if else 返回值
- angular - Angular Nested ngFor can't bind since it isn't a know property
- c++ - 如何指定自定义 libc++
- jhipster - 如何在使用 JDL studio 时为关系添加约束?
- laravel - 在我的 laravel 博客网站中,我想将帖子作者显示为登录管理员并显示在帖子视图中