【问题标题】:How to find all combinations in column and count occurrences in data如何查找列中的所有组合并计算数据中的出现次数
【发布时间】:2019-05-29 09:12:19
【问题描述】:

我正在尝试在我的第 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

编辑删除了猫的错误条目

【问题讨论】:

  • 您想解释一下您是如何获得一些 CountbyID 的吗?
  • 为什么你有两个cat,你是怎么得到这些计数的?

标签: r count combinations


【解决方案1】:

如果我的理解正确,你需要group_byPersonIDpaste在组中的所有uniqueAnimals并计算它们组合的出现次数,可以进行计数组中的行数 (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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      相关资源
      最近更新 更多