我试图在列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的错误条目
如果我理解正确的话,你需要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))