在R的Tibbles中对类似变量进行分组

时间:2019-01-27 08:40:58

标签: r

正在为R进行第二个项目。我试图使用dplyr创建一些变量组,但是我不确定在这里做什么。

我正在使用财务数据,在类别中,有几种不同的旅行形式,如下所示:

旅行-汽油,旅行-机票,旅行-地铁...

我想创建一个新的tibble,将所有Travel子类型分组为一个Travel子组。有什么好方法吗?

到目前为止,我一直在尝试使用dplyr filter函数。

对不起,我真的很累,忘了举个例子

我有这样的数据:

Month - Year - Category - Amount
01 - 2016 - "Travel- Air" - 247.02
01 - 2016 - "Travel- Car" - 29.04
01 - 2016 - "Retail"      - 45.00
03 - 2017 - "Travel - Air" - 253.60

我正在尝试对事物进行分组,以便将特定月份/年份中一种类型的所有交易汇总在一起,如下所示:

Total_Category_Transactions_Month <- Total_Transactions %>%
    group_by(month,Year,Category) %>%
    summarize(monthly = sum(Amount))

但是在查看了我的数据之后,有太多事情被归类为“ Travel-foo”。我想保留该细节以供以后分析,但是对于大范围的情况,我想看看我是否可以将所有这些差旅费用每月都归为一体。

输出应最终为:

   Month - Year - Category - Amount
    01  - 2016  - "Travel"  - 276.06
    01  - 2016  - "Retail"  - 45.00
    03  - 2017  - "Travel"  - 253.60

其中来自同一月份和年份的Travel_Foo类别的所有子类型都被添加到一个称为Travel的类别中

1 个答案:

答案 0 :(得分:0)

一种选择是使用tidyr::separate

df %>%
    separate(Category, into = c("Category"), extra = "drop") %>%
    group_by(Month, Year, Category) %>%
    summarise(Amount = sum(Amount)) %>%
    ungroup() %>%
    as.data.frame()
#  Month Year Category Amount
#1     1 2016   Retail  45.00
#2     1 2016   Travel 276.06
#3     3 2017   Travel 253.60

请注意,as.data.frame()在这里并不是必需的。我仅将其包括在内是为了显示结果Amount是预期输出的结果(tibble不会打印相同数量的小数位)。


样本数据

df <- read.table(text =
    "Month  Year  Category  Amount
01  2016  'Travel- Air'  247.02
01  2016  'Travel- Car'  29.04
01  2016  'Retail'       45.00
03  2017  'Travel - Air'  253.60", header = T)