count unique combinations of variable values in an R dataframe column [duplicate]

爷,独闯天下 提交于 2020-12-08 07:08:41

问题


I want to count the unique combinations of a variable that appear per group. For example:

df <- data.frame(id = c(1,1,1,2,2,2,3,3,4,4,4,5,6,6,7,7,7),
                 status =  c("a","b","c","a","b","c","b","c","b","c","d","b","b","c","b","c", "d"))

> df
   id status
1   1      a
2   1      b
3   1      c
4   2      a
5   2      b
6   2      c
7   3      b
8   3      c
9   4      b
10  4      c
11  4      d
12  5      b
13  6      b
14  6      c
15  7      b
16  7      c
17  7      d

So that, for example, I can tally how many times a given combination of "status" appears. By hand, for example, I see that "a,b,c" appears twice total (id's 1 and 2).

These seem to be similar questions, but I couldn't work out how to do it and with clearer explanation in R: Counting unique combinations Count of unique combinations despite order

The result I think I am looking for would be something like:

abc 2
bc  3
b   1
...

回答1:


An option with tidyverse where group by 'id', paste the 'status' and get the count

library(dplyr)
library(stringr)
df %>% 
   group_by(id) %>% 
   summarise(status = str_c(status, collapse="")) %>% 
   count(status)
# A tibble: 4 x 2
#  status     n
#  <chr>  <int>
#1 abc        2
#2 b          1
#3 bc         2
#4 bcd        2



回答2:


Here is a base R option via aggregate

> aggregate(.~status,rev(aggregate(.~id,df,paste0,collapse = "")),length) 
  status id
1    abc  2
2      b  1
3     bc  2
4    bcd  2



回答3:


You can use the apply family of functions too with tapply and lapply to get there with table.

tap <- tapply(df$status, df$id ,FUN= function(x) unique(x)) 
lap <- lapply(tap,FUN = function(x) paste0(x,collapse=""))
status <- unlist(lap)
df1 <- data.frame(table(status))

> df1
  status Freq
1    abc    2
2      b    1
3     bc    2
4    bcd    2


来源:https://stackoverflow.com/questions/63062416/count-unique-combinations-of-variable-values-in-an-r-dataframe-column

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!