我正在研究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
答案 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