具有唯一值和计数的新数据框

New data frame with unique values and counts

我想根据我的旧数据创建一个新数据 table,其中包括每个日期发生的所有“article_id”的计数(即有三个 article_id 列出的日期是 2001 年 10 月 1 日,所以我想要一栏包含日期,一栏包含文章数“3”)。

这里是数据的输出table:

            date       article_id  N
   1: 2001-09-01 FAS_200109_11104  3
   2: 2001-10-01 FAS_200110_11126  6
   3: 2001-10-01 FAS_200110_11157 21
   4: 2001-10-01 FAS_200110_11160  5
   5: 2001-11-01 FAS_200111_11220 26
  ---                               
7359: 2019-08-01  FAZ_201908_2958  7
7360: 2019-09-01  FAZ_201909_3316  8
7361: 2019-09-01  FAZ_201909_3515 13
7362: 2000-12-01 FAZ_200012_92981  3
7363: 2001-08-01 FAZ_200108_86041 14 

因此,我必须将唯一日期值移至新数据框(以便每个日期仅显示一次),以及每个日期显示的 article_id 计数.

我一直在努力解决这个问题,但还没有找到关于如何按组(日期)计算字符向量(article_id)出现次数的正确答案。我认为这在 R 中非常简单,但我是该程序的新手并且没有太多支持所以我非常感谢您的建议 - 非常感谢!

我们可以分组然后 summarise:

library(dplyr)
df %>% 
    group_by(date) %>% 
    summarise(n = n())
 date           n
  <chr>      <int>
1 2000-12-01     1
2 2001-08-01     1
3 2001-09-01     1
4 2001-10-01     3
5 2001-11-01     1
6 2019-08-01     1
7 2019-09-01     2

预期输出不明确。预期输出的一些假设

  1. 'N' 的总和 'date'
library(data.table)
dt[, .(N = sum(N, na.rm = TRUE)), by = date]
  1. 每个日期的唯一 'article_id' 计数
dt1[, .(N = uniqueN(article_id)), by = date]
  1. 通过 'date'
  2. 获得第一个计数
dt1[, .(N = first(N)), by = date]

这里有 2 tidyverse 个解决方案:

图书馆

图书馆(tidyverse)

示例数据

df <- 
  tibble(
    date = ymd(c("2001-09-01","2001-10-01","2001-10-01")),
    article_id = c("FAS_200109_11104","FAS_200110_11126","FAS_200110_11157"),
    N = c(3,6,21)
  )

解决方案

解决方案 1

df %>% 
  group_by(date) %>% 
  summarise(N = sum(N,na.rm = TRUE))

解决方案 2

df %>% 
  count(date,wt = N)

结果

# A tibble: 2 x 2
  date           n
  <date>     <dbl>
1 2001-09-01     3
2 2001-10-01    27