【问题标题】:how to get count and distinct count with group by in dataframe R如何在数据框R中使用group by获取计数和不同计数
【发布时间】:2018-06-07 08:20:42
【问题描述】:

我有以下提到的数据框:

Date         ID
2018-04-01   K-1
2018-04-01   K-1
2018-04-02   K-2
2018-04-02   K-2
2018-04-03   K-2
2018-04-04   K-3
2018-05-01   K-5
2018-05-01   K-5
2018-05-02   K-6
2018-05-02   K-7

通过使用上面的数据框,我想要下面提到的两个矩阵,按日期分组:

New_DF1

Date        Unique Count    Duplicate_Count
2018-04-01  1               1
2018-04-02  1               1
2018-04-03  1               0
2018-04-04  1               0
2018-05-01  1               0
2018-05-02  2               0

New_DF2

Month     Unique Count    Duplicate_Count
May-18    4               2
Apr-18    3               0

我试过了:

DF%>%
        group_by(Date) %>%
        summarise(count = n_distinct(ID))

但它无法工作。

【问题讨论】:

  • 我不明白你认为什么是唯一和重复的。你能解释一下吗?
  • @LAP for DF_1 Unique count 应该是 ID 的不同计数,Duplicate_count 应该是相同 ID 的额外计数(例如,如果只有一个 K-1如果K-1 的计数>1,则应为 0,假设为 3,而不是应为 2)。
  • @Moody_Mudskipper 从日期开始
  • 好吧,你能解释一下为什么2018-04-03 没有唯一但只有一个重复值,而只有一个 K-2 值,是因为错误吗?还是因为 K2 在整个列上不是唯一的?
  • 为什么在你的New_DF1 中没有2018-05-03

标签: r dataframe dplyr tidyr tidyverse


【解决方案1】:

dplyr:

library(dplyr)
New_DF1 <- DF %>%
  group_by(Date) %>%
  summarise(Unique_Count  = n_distinct(ID),
            Duplicate_Count = sum(table(ID)>1))

New_DF1
# # A tibble: 6 x 3
#         Date Unique_Count Duplicate_Count
#       <fctr>        <int>           <int>
# 1 2018-04-01            1               1
# 2 2018-04-02            1               1
# 3 2018-04-03            1               0
# 4 2018-04-04            1               0
# 5 2018-05-01            1               1
# 6 2018-05-02            2               0

New_DF2 <- New_DF1 %>%
  group_by(month = format.Date(Date, "%b-%y")) %>%
  summarize_at(2:3,sum)

New_DF2
# A tibble: 2 x 3
#    month Unique_Count Duplicate_Count
#    <chr>        <int>           <int>
# 1 Apr-18            4               2
# 2 May-18            3               1

带基R

New_DF1<- aggregate(ID ~ Date, DF, function(x) c(Unique_Count  = length(unique(x)),
                           Duplicate_Count = sum(table(x)>1)))

New_DF1<- cbind(New_DF1[1],New_DF1[[2]])

New_DF1
#         Date Unique_Count Duplicate_Count
# 1 2018-04-01            1               1
# 2 2018-04-02            1               1
# 3 2018-04-03            1               0
# 4 2018-04-04            1               0
# 5 2018-05-01            1               1
# 6 2018-05-02            2               0

New_DF2 <- New_DF1
New_DF2$month = format.Date(New_DF2$Date, "%b-%y")
New_DF2 <- aggregate(cbind(Unique_Count, Duplicate_Count) ~ month, New_DF2, sum)

New_DF2
#    month Unique_Count Duplicate_Count
# 1 Apr-18            4               2
# 2 May-18            3               1

【讨论】:

  • 谢谢它的工作。我怎样才能通过从日期派生月份来为New_DF2 做同样的事情。
【解决方案2】:

怎么样:

DF%>%
        group_by(Date, ID) %>%
        summarise(Unique_Count  = n_distinct(ID),
                  Duplicate_Count = n())

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2021-03-02
    • 2017-01-04
    • 1970-01-01
    相关资源
    最近更新 更多