提问者:小点点

如何查找列中的所有组合并计数数据中的出现次数


我试图在列1中的值数据中找到所有实际组合。

然后,我想通过第2列来计算所有这些事件。

感觉R应该能够相当快地做到这一点。我试着阅读了compn和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

EDIT删除了cat的错误条目


共2个答案

匿名用户

如果我理解正确的话,你需要group_by人ID粘贴组中所有唯一的动物,并计算它们组合的出现次数,可以计算组中的行数(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

匿名用户

使用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))