首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并行和重命名值

合并行和重命名值
EN

Stack Overflow用户
提问于 2017-09-28 13:13:33
回答 2查看 825关注 0票数 1

在对以下数据帧中的值进行重新编码时,我试图合并行:

代码语言:javascript
复制
     Days    Object   Frequency
1    1       Fruit    20
2    2       Fruit    21
3    3       Fruit    41
4    4       Fruit    12
5    5       Fruit    1   
6    6       Fruit    9
8    8       Fruit    1
9    9       Fruit    14

从本质上讲,我想把这些日子分组成这样的分类变量:

代码语言:javascript
复制
    Days    Object    Frequency
1   1-2     Fruit     41
2   3-4     Fruit     43
3   5+      Fruit     25

在为Days列创建新值的同时,是否有任何方法进行合并?

抱歉,如果这是个愚蠢的问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-28 13:24:09

在基数R中,可以将cutaggregate组合起来。在这里,cut生成日组,并向这些组提供标签。这是在一个带有Object的列表中输入给aggregate以执行完整分组。aggregate将频率作为其第一个参数并应用sum

代码语言:javascript
复制
aggregate(dat$Frequency, list(Days=cut(dat$Days, c(-Inf, 2, 4, Inf),
                                       labels=c("1-2", "2-4", "5+")),
                              object=dat$Object),
          sum)

这会返回

代码语言:javascript
复制
  Days object  x
1  1-2  Fruit 41
2  2-4  Fruit 53
3   5+  Fruit 25

要重命名x变量,可以将其包装在setNames中,也可以在第二行中使用names<-

与此等价的data.table

代码语言:javascript
复制
library(data.table)
setDT(dat)[, sum(Frequency),
           by=list(Days=cut(dat$Days, c(-Inf, 2, 4, Inf), labels=c("1-2", "2-4", "5+")),
                   object=dat$Object)]
   Days object V1
1:  1-2  Fruit 41
2:  2-4  Fruit 53
3:   5+  Fruit 25
票数 3
EN

Stack Overflow用户

发布于 2017-09-28 13:19:00

您可以在group_by中动态创建组变量,然后进行汇总(假设您也希望按Object分组):

代码语言:javascript
复制
df %>% 
    group_by(Days = if_else(Days %in% c(1,2), "1-2", if_else(Days %in% c(3,4), "3-4", "5+")), 
             Object) %>% 
    summarise(Frequency = sum(Frequency))

# A tibble: 3 x 3
# Groups:   Days [?]
#   Days Object Frequency
#  <chr> <fctr>     <int>
#1   1-2  Fruit        41
#2   3-4  Fruit        53
#3    5+  Fruit        25
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46470099

复制
相关文章

相似问题

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