r - 如何使用 dplyr r 对 grouped_tbl 中的选择列使用行手段来改变新列?
问题描述
我有一个来自我的大数据集的分组数据框,它有大约 800 列和大约 250 万条记录。我正在尝试创建一行,每列仅包含 5-10 列,但不知道为什么,我一直在获取NA
所有行的均值。
这是我尝试过的:
clean_bmk <- clean_bmk %>%
rowwise() %>%
mutate(
BMK_Mean_Strategic = mean(!!strategic, na.rm = T),
BMK_Mean_DiffChange = mean(!!diffchange, na.rm = T),
BMK_Mean_Failure = mean(!!failure, na.rm = T),
BMK_Mean_Narrow = mean(!!narrow, na.rm = T),
BMK_R1_Performance = mean(!!performance_vars, na.rm=T),
BMK_R2_Promotion = mean(!!promote_vars, na.rm=T),
BMK_R3_Derail = mean(!!derail_vars, na.rm=T))
class(clean_bmk)
[1] "grouped_df" "tbl_df" "tbl" "data.frame"
当我这样做时,所有变异的列都是 NA。但是,以下工作:
clean_bmk$Strategic_Mean <- rowMeans(clean_bmk[,strategic], na.rm=T)
不知道为什么,以及如何制作一个函数,以便我只能发送包含列名的变量列表,并改变数据框中的列?
例如:
strategic <- c("column1", "column15", "column27")
与其他变量类似diffchange
,如failure
, 等。
我试图dput(clean_bmk)
与您分享数据,但由于数据集很大,我无法获得它。我猜是因为它是一个grouped_df
,我不能使用[[
也不能使用sample()
数据集。
解决方案
使用它会效率低下rowwise
,而更好的选择是rowMeans
在select
感兴趣的列之后
library(dplyr)
clean_bmk %>%
ungroup %>%
mutate(
BMK_Mean_Strategic = rowMeans(select(., strategic), na.rm = TRUE),
BMK_Mean_DiffChange = rowMeans(select(., diffchange), na.rm = TRUE),
BMK_Mean_Failure = rowMeans(select(., failure), na.rm = TRUE),
BMK_Mean_Narrow = rowMeans(select(., narrow), na.rm = TRUE),
BMK_R1_Performance = rowMeans(select(., performance_vars), na.rm=TRUE),
BMK_R2_Promotion = rowMeans(select(., promote_vars), na.rm=TRUE),
BMK_R3_Derail = rowMeans(select(., derail_vars), na.rm=TRUE))
使用可重现的示例
data(mtcars)
#v1 <- c('mpg', 'disp')
mtcars %>%
transmute(newMean = rowMeans(select(., v1), na.rm = TRUE)) %>%
head
# newMean
#Mazda RX4 90.50
#Mazda RX4 Wag 90.50
#Datsun 710 65.40
#Hornet 4 Drive 139.70
#Hornet Sportabout 189.35
#Valiant 121.55
推荐阅读
- c++ - 如何找到正在重新启动我的 Windows 服务的应用程序
- jmeter - 从数组创建 json 并在 POST 请求正文中发送
- java - 如何使用共享偏好保存用户硬币
- javascript - Gulp 必须节省两次才能工作
- python - “RepeatedCompositeContainer”类型的对象不是 JSON 可序列化的
- cassandra - jconsole 不能在 ec2 机器上运行
- indexing - 在没有父级的 Marklogic 中创建地理空间对索引
- security - CoAP 的 TinyDTLS 问题
- javascript - Javascript:合并 2 个数组(不同的属性)
- linux - Not able to install Docker compose in Linux