r - 用 tibble 创建一个表
问题描述
我确实有以下dataframe
4500 万次观察:
year month variable
1992 1 0
1992 1 1
1992 1 1
1992 2 0
1992 2 1
1992 2 0
我的目标是计算一年中每个月的变量频率。
我已经能够使用cps_data
as mydataframe
和SKILL_1
as my生成这些总和variable
。
cps_data %>%
group_by(YEAR, MONTH) %>%
summarise_at(vars(SKILL_1),
list(name = sum))
从逻辑上讲,我获得了 348 行不同的行作为小标题。现在,我很难用这些值创建一个新表。我的新表应该和我的小标题相似。我怎样才能做到这一点?有没有办法?我已经尝试读取日期范围为 01/1992 至 01/2021 的 excel 文件,以获得正好 349 行,然后将其与 tibble 的行合并,但它不起作用..
# A tibble: 349 x 3
# Groups: YEAR [30]
YEAR MONTH name
<dbl> <int+lbl> <dbl>
1 1992 1 [January] 499
2 1992 2 [February] 482
3 1992 3 [March] 485
4 1992 4 [April] 457
5 1992 5 [May] 434
6 1992 6 [June] 470
7 1992 7 [July] 450
8 1992 8 [August] 438
9 1992 9 [September] 442
10 1992 10 [October] 427
# ... with 339 more rows
提前谢谢了!!
解决方案
library(zoo)
createmonthyear <- function(start_date,end_date){
ym <- seq(as.yearmon(start_date), as.yearmon(end_date), 1/12)
data.frame(start = pmax(start_date, as.Date(ym)),
end = pmin(end_date, as.Date(ym, frac = 1)),
month = month.name[cycle(ym)],
year = as.integer(ym),
stringsAsFactors = FALSE)}
创建函数后,您可以指定所需的开始和结束日期:
left_table <- data.frame(createmonthyear(1991-01-01,2021-01-01))
然后用你所拥有的加入输出
library(dplyr)
right_table <- data.frame(cps_data %>%
group_by(YEAR, MONTH) %>%
summarise_at(vars(SKILL_1),
list(name = sum)))
results <- left_join(left_table, right_table, by = c("Year" = "year", "Month" = "month")
推荐阅读
- python-3.x - 追加一个列表,直到达到大小限制,然后开始一个新列表
- python - skimage 在每个通道的 LAB 颜色空间中使用什么范围?
- javascript - 如何只获取数组的前 n%?
- c - rodinia 3.1 肌细胞基准中的奇怪结构
- react-native - 访问 Expo SQLite 数据库的物理存储
- vba - 为什么使用 print 写入 csv 文件会将一行分成两行?
- keycloak - 使用 openid (keycloak) 保护 micronaut 应用程序时“重定向过多”
- java - 不能同时运行两个着色器程序,但是单独使用时每个都可以正常工作
- office-js - Microsoft Outlook 插件中的自定义任务窗格标题
- azure-functions - IFunctionExceptionFilter 和编写响应