我正在尝试在第1列的值数据中查找所有实际组合。
然后,我想按第2列计算所有此类事件的发生次数。
感觉R应该可以很快地做到这一点。我尝试阅读combn和expand.grid,但没有成功。主要问题是我找不到有关如何在列中生成组合的任何指导。
我的数据如下:
Animal (n=57) | Person ID (n=1000)
Dog | 0001
Cat | 0004
Bird | 0001
Snake | 0002
Spider | 0002
Cat | 0003
Dog | 0004
预期输出为:
AnimalComb | CountbyID
Cat | 1
DogBird | 1
SnakeSpider | 1
CatDog | 1
编辑删除了有关cat的错误条目
答案 0 :(得分:5)
如果我对您的理解正确,则需要group_by
PersonID
和paste
分组中的所有unique
Animal
并计数可以通过计算组中的行数(n()
)并将其除以不同值的数量(n_distinct
)来进行组合。
library(dplyr)
df %>%
group_by(PersonID) %>%
summarise(AnimalComb = paste(unique(Animal), collapse = ""),
CountbyID = n() / n_distinct(Animal))
# PersonID AnimalComb CountbyID
# <int> <chr> <dbl>
#1 1 DogBird 1
#2 2 SnakeSpider 1
#3 3 Cat 1
#4 4 CatDog 1
答案 1 :(得分:0)
使用data.table
library(data.table)
setDT(df)[, .(AnimalComb = toString(unique(Animal)),
CountbyID = .N/uniqueN(Animal)), by = PersonID]
df <- structure(list(Animal = c("Dog", "Cat", "Bird", "Snake", "Spider",
"Cat", "Dog"), PersonID = c(1L, 4L, 1L, 2L, 2L, 3L, 4L)),
class = "data.frame", row.names = c(NA, -7L))