【问题标题】:How to reduce a data frame by grouping data?如何通过分组数据来减少数据框?
【发布时间】:2017-10-20 17:16:56
【问题描述】:

:)

有没有一种简单的方法可以根据某些特征将特定数据集分组到简化的数据框中?我正在为此考虑一种算法,但是R中是否有任何可以用于此的函数?我正在尝试使用dplyr,但效果不佳...

例如:

P.S.:我的数据在一个超过1Gb的矩阵中,也就是说,我需要一个更自动化的过程。

示例数据:

structure(list(Nun = 1:6, Event = c(1L, 1L, 1L, 1L, 2L, 2L), 
    Time = structure(c(3L, 4L, 5L, 6L, 1L, 2L), .Label = c("11:34", 
    "11:36", "8:50", "8:52", "8:54", "8:56"), class = "factor"), 
    User = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("U1", 
    "U7"), class = "factor")), .Names = c("Nun", "Event", "Time", 
"User"), class = "data.frame", row.names = c(NA, -6L))

【问题讨论】:

  • 几点了? H:M?或M:S?
  • U7 还是U2?并发布dput(data)的输出,而不是图形文件。

标签: r dataframe dplyr tidyverse


【解决方案1】:

您可以使用来自dplyr 包的summarise

library(dplyr)

your_data_frame %>% 
    group_by(User, Event) %>%
    summarise(Duration = max(Time) - min(Time))

【讨论】:

    【解决方案2】:

    这里是data.table 方式。

    示例数据:

    x<-structure(list(Nun = 1:6, Event = c(1L, 1L, 1L, 1L, 2L, 2L), 
        Time = structure(c(1508514600, 1508514720, 1508514840, 1508514960, 
        1508524440, 1508524560), class = c("POSIXct", "POSIXt"), tzone = ""), 
        User = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("U1", 
        "U7"), class = "factor")), .Names = c("Nun", "Event", "Time", 
    "User"), row.names = c(NA, -6L), class = "data.frame")
    

    代码:

    require(data.table)
    setDT(x)
    
    x[,list(Duration = max(Time)-min(Time)),by = list(Event,User)]
       Event User Duration
    1:     1   U1   6 mins
    2:     2   U7   2 mins
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多