【问题标题】:group a column by date with different formats按日期对不同格式的列进行分组
【发布时间】:2019-05-31 20:47:40
【问题描述】:

我有一个数据集,其中一列有日期和时间值。每个日期都有多个条目。每个日期的第一行具有29MAY2018_00:00:00.000000 形式的日期值,而同一日期的其余行具有时间值,即20:00 - 21:00。问题是我想对每一天的另一列中的值求和。

样本数据格式如下

Date                       A
29MAY2018_00:00:00.000000   
20:00 - 21:00              0.009
21:00 - 22:00              0.003
22:00 - 23:00              0.0003
23:00 - 00:00              0
30MAY2018_00:00:00.000000   
00:00 - 01:00              -0.0016
01:00 - 02:00              -0.0012
02:00 - 03:00              -0.0002
03:00 - 04:00              -0.0023
04:00 - 05:00              0
05:00 - 06:00              -0.0005
20:00 - 21:00              -0.0042
21:00 - 22:00              -0.0035
22:00 - 23:00              -0.0026
23:00 - 00:00              -0.001

我创建了一个新列

data$C[data$A ==0 ] <- 0
data$C[data$A < 0 ] <- -1
data$C[data$A > 0 ] <- 1

我需要对每个日期的“C”列求和。 输出应该是

A                    B
29-MAY-2019          4
30-MAY-2019         -9
31-MAY-2019          3

【问题讨论】:

  • 您不需要 3 个作业。只需使用data$C &lt;- sign(data$A)
  • 31-MAY-2019 未在示例中显示
  • 对不起,以上数据只是一个样本,我有很多年的数据

标签: r date group-by


【解决方案1】:

一种选择是根据“日期”中出现的完整日期时间格式创建一个分组列,summarise 第一个“日期”,将其转换为Date 格式(anydate 来自@987654324 @) 并得到 sumsign 的 'A'

library(tidyverse)
library(anytime)
data %>%
    group_by(grp = cumsum(str_detect(Date, "[A-Z]"))) %>% 
    summarise(Date = anydate(first(Date)),
               B = sum(sign(A), na.rm = TRUE))

【讨论】:

  • 谢谢@akrun,它成功了。我在终端上得到了结果,但不知道如何在 DF 中得到它
  • @Abrar 只需将其分配给数据框 DF &lt;- data %&gt;% group_by(grp = cumsum(str_detect(Date, "[A-Z]"))) %&gt;% summarise(Date = anydate(first(Date)), B = sum(sign(A), na.rm = TRUE))
猜你喜欢
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 2015-06-26
  • 2013-01-16
  • 2013-12-06
相关资源
最近更新 更多