【问题标题】:Count different values in a grouped by subset [duplicate]计算按子集分组的不同值[重复]
【发布时间】:2017-09-30 21:24:16
【问题描述】:

我有以下数据集

data.frame(company=c("c1","c2","c3","c2","c1","c2"),field=c("A","B","C","A","D","C"))

我很想知道

每家公司有多少不同的领域?

所以,我需要一个如下所示的数据框

company   filds

c1          2

c2          3

c3          1

【问题讨论】:

  • 字段数 (length) 或不同 (length(unique(...))) 字段数?这个例子是模棱两可的。

标签: r


【解决方案1】:

我们可以使用aggregate'company'的'field'来查找每个'company'中'unique'元素的length

aggregate(field~company, df1, FUN = function(x) length(unique(x)))
#   company field
#1      c1     2
#2      c2     3
#3      c3     1

或使用data.table,转换为“data.table”(setDT(df1)),按“公司”分组,使用方便的包装器(uniqueN,即uniquelength

library(data.table)
setDT(df1)[, .(fields = uniqueN(field)), company]
#   company fields
#1:      c1      2
#2:      c2      3
#3:      c3      1

或者dplyrn_distinct

library(dplyr)
df1 %>%
    group_by(company) %>%
    summarise(fields = n_distinct(field))

注意:在示例中,每个“公司”的unique“字段”数和“公司”中的总元素相同。如果是后者,则使用来自data.table.N 或来自dplyrn(),即

setDT(df1)[, .(fields = .N), company]

数据

df1 <- data.frame(company=c("c1","c2","c3","c2","c1","c2"),
                       field=c("A","B","C","A","D","C"))   

【讨论】:

    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 2018-11-29
    • 2016-01-10
    • 2017-11-01
    • 1970-01-01
    • 2022-11-22
    • 2014-07-31
    • 2014-10-14
    相关资源
    最近更新 更多