首页 > 解决方案 > 用 tibble 创建一个表

问题描述

我确实有以下dataframe4500 万次观察:

year month variable
 1992    1    0
 1992    1    1
 1992    1    1
 1992    2    0
 1992    2    1
 1992    2    0  

我的目标是计算一年中每个月的变量频率。
我已经能够使用cps_dataas mydataframeSKILL_1as 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

提前谢谢了!!

标签: r

解决方案


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")

推荐阅读