作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 R 中的范围内转换聚合值并用零填充缺失的范围值。
df <- data.frame (year = sample(c(2014:2016), 100, replace=T),
month = sample(c(1:5,8:12), 100, replace=T),
int = 1)
# install.packages("reshape")
library(reshape)
month <- cast(df, year ~ month, sum, value = 'int')
month
输出:
# output
year 1 2 3 4 5 8 9 10 11 12
1 2014 6 5 4 3 4 4 3 3 9 2
2 2015 4 9 1 3 1 4 3 3 2 3
3 2016 0 3 3 4 4 1 4 1 3 1
如何将缺失的月份设置为零?结果应该是这样的:
# output
year 1 2 3 4 5 >6< >7< 8 9 10 11 12
1 2014 6 5 4 3 4 0 0 4 3 3 9 2
2 2015 4 9 1 3 1 0 0 4 3 3 2 3
3 2016 0 3 3 4 4 0 0 1 4 1 3 1
有没有办法通过 cast 函数做到这一点?
最佳答案
我们可以使用 tidyverse
将 'month' 转换为 factor
,levels
指定为 1:12,得到 sum “int”的
按“year”、“month”和 spread
分组为带有 drop=FALSE
library(tidyverse)
df %>%
group_by(year, month = factor(month, levels = 1:12)) %>%
summarise(int = sum(int)) %>%
spread(month, int, drop = FALSE, fill = 0)
# year `1` `2` `3` `4` `5` `6` `7` `8` `9` `10` `11` `12`
#* <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 2014 3 2 2 1 2 0 0 4 1 5 5 6
#2 2015 2 7 5 2 4 0 0 5 3 3 4 5
#3 2016 0 4 5 5 2 0 0 3 2 1 5 2
或者在一行中使用dcast
library(data.table)
dcast(setDT(df), year ~ factor(month, levels = 1:12), sum, drop = FALSE)
# year 1 2 3 4 5 6 7 8 9 10 11 12
#1: 2014 3 2 2 1 2 0 0 4 1 5 5 6
#2: 2015 2 7 5 2 4 0 0 5 3 3 4 5
#3: 2016 0 4 5 5 2 0 0 3 2 1 5 2
或者使用来自 base R
的 xtabs
xtabs(int~year+factor(month, levels = 1:12), df)
关于r - 如何在 R 中的范围内转换聚合值并用零填充缺失的范围值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42344218/
我是一名优秀的程序员,十分优秀!