首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据特定列对数据进行分组,并将聚合作为R中的一个单独列添加?

如何根据特定列对数据进行分组,并将聚合作为R中的一个单独列添加?
EN

Stack Overflow用户
提问于 2020-01-02 22:19:55
回答 1查看 36关注 0票数 2

我有一个像这样的数据文件:

代码语言:javascript
复制
  PM2.5 PM10 SO2 datetime
1     4    4   7  2013-3-1
2     8    4   7  2013-3-1
3     7    7   3  2013-3-1
4     6    6   3  2013-3-2
5     3    3   3  2013-3-2
6     5    5   4  2013-3-2

现在,我希望groupby --基于datetime列的所有列,并且在操作之后,结果数据like应该如下所示:

代码语言:javascript
复制
       PM2.5       PM10       SO2    datetime   PM2.5_mean  PM10_mean  SO2_mean  PM2.5_min  PM10_min  SO2_min   PM2.5_max  PM10_max  SO2_max
1    [4,8,7]    [4,4,7]   [7,7,3]    2013-3-1         6.33          5      5.66          4         4        3           8         8        7  
2    [6,3,5]    [6,3,5]   [3,3,4]    2013-3-2         4.66       4.66      3.33          3         3        3           6         6        4 

我尝试应用聚合函数,但这样只能得到平均值/ min / max。但是,我想将均值,min,max作为数据挖掘中每个现有列的单独列。我该怎么做呢?或者还有其他方法可以得到所需的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-02 22:25:57

一个选项是在按'datetime‘分组之后,获取mutate_at中其余列的mutate_at,在group_by中添加它,然后对初始列进行paste

代码语言:javascript
复制
library(dplyr)
df1 %>% 
   group_by(datetime) %>%
   mutate_at(vars(-group_cols()), list(mean = mean, max = max)) %>% 
   group_by_at(vars(matches('(mean|max)$')), .add = TRUE) %>% 
   summarise_at(vars(-group_cols()), ~ sprintf("[%s]", toString(.)))
# A tibble: 2 x 10
# Groups:   datetime, PM2.5_mean, PM10_mean, SO2_mean, PM2.5_max, PM10_max [2]
#  datetime PM2.5_mean PM10_mean SO2_mean PM2.5_max PM10_max SO2_max PM2.5     PM10      SO2      
#  <chr>         <dbl>     <dbl>    <dbl>     <int>    <int>   <int> <chr>     <chr>     <chr>    
#1 2013-3-1       6.33      5        5.67         8        7       7 [4, 8, 7] [4, 4, 7] [7, 7, 3]
#2 2013-3-2       4.67      4.67     3.33         6        6       4 [6, 3, 5] [6, 3, 5] [3, 3, 4]

数据

代码语言:javascript
复制
df1 <- structure(list(PM2.5 = c(4L, 8L, 7L, 6L, 3L, 5L), PM10 = c(4L, 
4L, 7L, 6L, 3L, 5L), SO2 = c(7L, 7L, 3L, 3L, 3L, 4L), datetime = c("2013-3-1", 
"2013-3-1", "2013-3-1", "2013-3-2", "2013-3-2", "2013-3-2")),
class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59570750

复制
相关文章

相似问题

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