r - R 变异列代表许多其他列的平均值
问题描述
我正在尝试在我的 DataFrame 中添加一个表示许多其他列的平均值的列(表示单个构造的项目)。
数据框有许多其他列,但特别是 eng1、eng2、eng3...engN 列,其中 N 是一个很大的数字,我想取所有 eng* 列的平均值并将该平均值作为新列添加到我的数据集中。
我能够使用以下代码做到这一点:
narrow_ds # ... initialization of dataframe
library(dplyr)
narrow_ds <- bind_cols(narrow_ds, (narrow_ds %>%
select(starts_with("eng")) %>% mutate(eng=rowMeans(., na.rm=TRUE))) %>%
select(eng))
似乎拥有 na.rm=TRUE 要求迫使我跳过一些障碍。
我的问题是是否有更直接的方法可以做到这一点?
解决方案
你的方向非常正确。您可以bind_cols
通过调整代码来避免。此外,NA
即使在rowMeans
. 我已经修改了所使用的样本数据,@Tung
也包括少数NAs
。解决方案可以是:
选项#1:使用dplyr
与 OP 类似的方法。
library(dplyr)
DF %>% mutate(eng = rowMeans(select(.,starts_with("eng")), na.rm = TRUE))
# # A tibble: 4 x 5
# id eng1 eng2 eng3 eng
# <int> <dbl> <dbl> <dbl> <dbl>
# 1 1 50.0 NA 20.0 35.0
# 2 2 NA 100 10.0 55.0
# 3 3 20.0 150 80.0 83.3
# 4 4 30.0 200 40.0 90.0
选项#2:使用apply
DF$eng <- apply(DF[,grep("eng",names(DF))], 1, mean, na.rm = TRUE)
DF
# # A tibble: 4 x 5
# id eng1 eng2 eng3 eng
# <int> <dbl> <dbl> <dbl> <dbl>
# 1 1 50.0 NA 20.0 35.0
# 2 2 NA 100 10.0 55.0
# 3 3 20.0 150 80.0 83.3
# 4 4 30.0 200 40.0 90.0
样本数据:
DF = data_frame(id = 1:4,
eng1 = c(50, NA, 20, 30),
eng2 = c(NA, 100, 150, 200),
eng3 = c(20, 10, 80, 40))
推荐阅读
- sql - 合并实体的相似数据
- python - Tensorflow中张量的逐行处理
- html - 如何防止文本重叠导航栏?
- r - R 问题 - 尝试使用非常量分隔符单独拆分数据
- r - ggplot2 geom_jitterdodge 点和叠加闪避箱线图:我想保留点的颜色,但强制箱线图为黑色
- java - 错误:无法下载 kotlin-gradle-plugin.jar (org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50):没有可离线使用的缓存版本
- python - Python CRUD 实例函数崩溃 pyqt5 GUI
- git - 防止git bash自动改变路径
- javascript - 尝试创建一个 for 循环,将其运行的总和迭代地累加到一个总变量中
- html - 如何在不同的显示设置中避免 HTML 元素中的像素失真?