计算group_by()中的分类变量

时间:2018-01-08 20:03:37

标签: r group-by categories

我正在研究NCED的保护地役权数据。我有一个包裹的数据框,有一些重复的ID和所有者。我想将重复的ID分组到一行,其中包含不同数量的所有者...但是基于this question and answer我只是返回ID的行数。

uniqueID <- c(1:10)
parcelID <- c('a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c')
owner <- c('owner1', 'owner1', 'owner1', 'owner2', 'owner3',
           'owner2', 'owner2', 'owner2', 'owner3', 'owner1')
mydat1 <- data.frame(uniqueID, parcelID, owner)

numberOwners <- mydat1 %>% group_by(parcelID, owner) %>% tally()

我想要的输出是:

  parcelID_grouped nOwners
1                a       3
2                b       1
3                c       2

2 个答案:

答案 0 :(得分:1)

使用 dplyr 有两种方法可以做到这一点:

library(dplyr)

mydat1 %>% distinct(parcelID, owner) %>% count(parcelID) 

mydat1 %>% group_by(parcelID) %>% summarise(n = n_distinct(owner))

两次调用导致:

#   parcelID     n
# 1 a            3
# 2 b            1
# 3 c            2

答案 1 :(得分:0)

使用data.table: -

library(data.table)
setDT(mydat1)
mydat1[, uniqueID := NULL]
mydat1 <- unique(mydat1)
mydat1[, nOwners := .N, by = parcelID]
mydat1[, owner := NULL]
mydat1 <- unique(mydat1)
setnames(mydat1, "parcelID", "parcelID_grouped")

您将获得所需的输出: -

     parcelID_grouped   nOwners
1:                a       3
2:                b       1
3:                c       2