【问题标题】:R - How to add the sum of a specific occurrence in one column to another columnR - 如何将一列中特定出现的总和添加到另一列
【发布时间】:2019-05-07 16:07:43
【问题描述】:

使用 R.

这是我的数据集的一小部分,经过简化后仅显示相关列。数据来自 Capital Bikeshare。下面的 Start.Date 列包含自行车的确切租赁时间。

Start.date              Member.type
2018-11-01 00:00:45     Member
2018-11-01 00:00:52     Casual
2018-11-01 00:01:46     Member
2018-11-01 01:00:02     Casual
2018-11-01 01:03:36     Member

我要做的是按日期、一天中的小时、每种成员类型的数量以及任何给定日期的任何给定时间的成员类型总数(休闲+成员)对所有数据进行分组。所以,最后,我只需要“天 - 小时 - 每种会员类型的租赁数量”,这样我就可以预测一天中小时的趋势,

这是我的相关代码

library(dplyr)
bikeData <- read.csv("2011data.csv")

bikeData <- bikeData %>%
  mutate(Hour = format(strptime(
    bikeData$Start.date, "%Y-%m-%d %H:%M:%S"), "%m-%d %H")) %>%
  mutate(day = wday(Start.date, label=TRUE)) 

groupData <- bikeData %>%
  mutate(Start.date = ymd_hms(Start.date)) %>%
  count(date1 = as.Date(Start.date), Hour1 = hour(Start.date),
        member=(Member.type)) %>%
  group_by(date1, Hour1) %>%
  arrange(date1, Hour1) %>%
  summarise(total=sum(n))

这给了我以下新数据集 groupData

date1          Hour1     total 
2018-11-01         0        82
2018-11-01         1        43 
2018-11-01         2        17 
2018-11-01         3         4   
2018-11-02         0         5 
2018-11-02         1        24   

所以我能够在我的数据集的每一天 24 小时内计算会员+休闲的总数,但是我如何获得另外两列显示休闲总数,另一列显示休闲总数成员?谢谢!

以下要求:

date1          Hour1     total     Casual     Member
2018-11-01         0        82        40          42
2018-11-01         1        43        20          23
2018-11-01         2        17        10           7
2018-11-01         3         4         1           3
2018-11-02         0         5         1           4
2018-11-02         1        24        20           4

【问题讨论】:

  • 你能提供你的样本数据作为 dput 吗?会更容易复制。

标签: r dplyr


【解决方案1】:
groupData <- bikeData %>%
  mutate(Start.date = ymd_hms(Start.date)) %>%
  count(date1 = as.Date(Start.date), Hour1 = hour(Start.date),
        member=(Member.type)) %>%
  group_by(date1, Hour1) %>%
  arrange(date1, Hour1) %>%
  summarise(total=sum(n),members=sum(Member.type=="Member"),casuals=sum(Member.type=="Casual"))

您可以简单地将两个变量添加到汇总调用中,这些变量计算 Member.type 的逻辑出现次数等于每个选项。

【讨论】:

  • 看起来我在会员和临时工的整个列中都得到了 1 的值。我需要更改值的类型吗?一个小的更正,我将 Member.type 切换为 member,所以我不得不在最后一行使用它。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多