【问题标题】:Cleaning Data in R在 R 中清理数据
【发布时间】:2016-03-06 04:46:02
【问题描述】:

我有一个如下所示的数据集-

Date     Customer      Cost      Location
1/2/15    Jon          $50       Sunnyvale, CA
1/5/15    Jon          $125      Sunnyvale, CA
1/15/15   Jon          $25       Sunnyvale, CA
1/3/15    Martha       $30       Fresno, CA
1/7/15    Martha       $40       Fresno, CA
2/16/15   James        $30       Tempe, AR
2/20/15   James        $70       Tempe, AR

我想转换为以下格式,其中每一行都为我提供有关单个客户、他的最新到达日期、净支出、总出现次数的信息并创建一个到达模型-

Date     Customer     Mean ITA(days)    Frequency    Cost    Location
1/15/15    Jon        6.5                3          $200     Sunnyvale, CA
1/7/15     Martha     4                  2          $70      Fresno, CA
2/20/15    James      4                  2          $100     Tempe, AR

感谢您在 R 中提供的任何帮助。我正在使用 tidyr 包,但无法弄清楚如何完成这项工作。

【问题讨论】:

  • 什么是 ITA?你是怎么算的?
  • 首先,学习如何转换日期,然后学习如何使用 dplyr,尤其是它的summarise 命令。 (很确定ITA = ( last(Date) - first(Date) ) / n(),以防有人对此感到困惑)
  • 一般来说,dplyr 你需要df %>% group_by(Customer, Location) %>% summarise( ... ),其中... 是构造你想要的所有列的参数。首先,清理您的原始数据;你的日期不是日期对象,如果它们有$,你的成本也不是数字。当您遇到困难时告诉我们,我们会为您指明正确的方向。

标签: r dplyr tidyr


【解决方案1】:

正如 alistaire 指出的那样,您需要 dplyr,而不是 tidyr。

library(dplyr)

df %>% 
  group_by(Customer) %>% 
  summarise(Frequency = n(), 
            Cost = sum(Cost),
            ITA = (max(Date) - min(Date))/2,
            Date = max(Date))
  Customer Frequency  Cost      ITA       Date
    (fctr)     (int) (dbl)   (dfft)     (date)
1    James         2   100 2.0 days 2015-02-20
2      Jon         3   200 6.5 days 2015-01-15
3   Martha         2    70 2.0 days 2015-01-07

【讨论】:

    猜你喜欢
    • 2020-09-02
    • 2017-11-24
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多