我有一个包含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
答案 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