首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于特定因子值的选定行和列中的r-求和数值

基于特定因子值的选定行和列中的r-求和数值
EN

Stack Overflow用户
提问于 2018-03-06 04:14:41
回答 1查看 930关注 0票数 2

我有以下data.frame:

代码语言:javascript
复制
Engine      | MPG | Test_Distance
1. V6       | 17  |       751
2. V4       | 22  |       1850
3. V4-Hybrid| 26  |       210
4. V6-Hybrid| 24  |       85
5. Flat4    | 26  |       4560
6. V6-Hybrid| 28  |       124
7. Flat4    | 17  |       3455
8. V4       | 17  |       1642

其中引擎是因子向量,MPG和Test_Distance都是数值向量。

在进行更复杂的stat计算和绘图之前,我希望通过排序简化data.frame:

  • 引擎列按类型(创建新值/行并删除旧值/行),
  • 平均(平均)为每Engine_type的MPG列,
  • Test_Distance列通过添加每种类型的数值,
  • 添加一个包含总平均值的新行。

注意:这个data.frame中还有很多其他的列,但是我只放了三个来简化这个方法。

下面是我想要的结果data.frame:

代码语言:javascript
复制
Engine_Type | MPG_avg | Test_Distance_total
1. Vx       |   18.7  |       4243
2. Vx_Hybrid|   26    |       419
3. Flatx    |   14.4  |       8015
4. TOTALS   |   19.7  |       12677

我尝试使用dplyrplyr包,并使用以下函数:aggregaterowSumscolSumsdata.table。但没有结果。我想创建一个临时data.frame,然后重新集成原始data.frame中的新值,但我希望有一种更快的方法。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2018-03-06 04:27:04

我们将“Engine”中的数字替换为group_bysummarise中的“x”,以分别获得“MPG”和“Test_Distance”的meansum,并将行与汇总输出的meansum绑定。

代码语言:javascript
复制
library(dplyr)
df1 %>%        
    group_by(Engine = sub("\\d+", "x", Engine)) %>%
    summarise(MPG = mean(MPG), Test_Distance_total = sum(Test_Distance))%>%
    bind_rows(tibble(Engine = 'TOTALS', 
                        MPG = mean(.$MPG), 
                        Test_Distance_total = sum(.$Test_Distance_total)))
# A tibble: 4 x 3
#  Engine      MPG Test_Distance_total
#  <chr>     <dbl>               <int>
#1 Flatx      21.5                8015
#2 Vx         18.7                4243
#3 Vx-Hybrid  26.0                 419
#4 TOTALS     22.1               12677

数据

代码语言:javascript
复制
df1 <- structure(list(Engine = c("V6", "V4", "V4-Hybrid", "V6-Hybrid", 
"Flat4", "V6-Hybrid", "Flat4", "V4"), MPG = c(17L, 22L, 26L, 
24L, 26L, 28L, 17L, 17L), Test_Distance = c(751L, 1850L, 210L, 
85L, 4560L, 124L, 3455L, 1642L)), .Names = c("Engine", "MPG", 
"Test_Distance"), class = "data.frame", row.names = c("1.", "2.", 
"3.", "4.", "5.", "6.", "7.", "8."))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49123289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档