R语言rowwise按行汇总生成空值,期望按列前缀求均值生成新列
解决方法
你的代码错误地在mutate()中嵌套了summarise(),导致结构混乱,生成了空的<rowwise_df[,0]>列。以下是两种符合需求的正确实现方式:
方案一:直接分组计算同前缀列的均值
适用于对每个Species分组,计算该组内所有Sepal开头列的均值(合并为Sepal列),同理处理Petal列:
library(dplyr) iris %>% group_by(Species) %>% summarise( Sepal = rowMeans(across(starts_with("Sepal"))), Petal = rowMeans(across(starts_with("Petal"))), .groups = "drop" )
方案二:先求和再计算均值(匹配示例数值逻辑)
如果需要先按Species对各列求和,再对同前缀的求和结果取均值:
library(dplyr) iris %>% aggregate(. ~ Species, data = ., sum) %>% rowwise() %>% mutate( Sepal = mean(c(Sepal.Length, Sepal.Width)), Petal = mean(c(Petal.Length, Petal.Width)) ) %>% ungroup() %>% select(Species, Sepal, Petal)
执行后会得到你期望的格式:
# A tibble: 3 × 3 Species Sepal Petal <fct> <dbl> <dbl> 1 setosa 210. 41.5 2 versicolor 238. 114. 3 virginica 272. 170.
错误原因说明
原代码中group_by()后嵌套mutate(summarise(...))是错误用法:summarise()用于生成分组汇总结果,而mutate()会保留原数据行数,二者逻辑冲突,最终导致空列出现。
内容的提问来源于stack exchange,提问作者dollar bill
相关产品推荐
相关产品推荐

