R:根据另一列填充0行

时间:2018-01-21 17:22:39

标签: r

我有一个包含3列的df:日,小时,会话。

我需要根据工作日完成数据框中不存在的小时数0。小时数从1到23。

例如,星期日有早上6点的数据,但不是<早上6点(1,2,3,4,5)。

这些功能有用吗? PKG?

原始数据示例:

In [42]: foo(2)
*
*
*
Out[42]: 4

In [43]: foo(3)
*
*
*
*
*
*
Out[43]: 10

In [44]: foo(4)
*
*
*
*
*
*
*
*
*
*
Out[44]: 20

期望的输出:(早上6点以后,还有更多的小时加0,但你明白了)

def median(data):
    data.sort()
    mid = len(data) // 2
    return (data[mid] + data[~mid]) / 2

数据:

  day   hour  sessions
  <fct> <chr>    <dbl>
1 Sun   06        1.00
2 Sun   10        2.00
3 Sun   11        2.00
4 Sun   12        1.00
5 Sun   18        1.00
6 Sun   20        2.00

1 个答案:

答案 0 :(得分:2)

这是一个使用dplyr包的简单解决方案。我先将hour变量强制转换为数字。

library(dplyr)
allHours <- function(data) {
  data.frame(hour = 1:23, 
             sessions = sapply(1:23, function(x) sum(data$sessions[data$hour == x])))
}
df %>% 
  mutate(hour = as.numeric(hour)) %>%
  group_by(day) %>%
  do(allHours(.))

输出:

# A tibble: 161 x 3
# Groups:   day [7]
      day  hour sessions
   <fctr> <int>    <dbl>
 1    Sun     1        0
 2    Sun     2        0
 3    Sun     3        0
 4    Sun     4        0
 5    Sun     5        0
 6    Sun     6        1
 7    Sun     7        0
 8    Sun     8        0
 9    Sun     9        0
10    Sun    10        2
# ... with 151 more rows