summarizing counts of a factor with dplyr
If you wanted to forego the dplyr
, you can split into lists.
df <- split(df, list(df[[obs1]], df[[obs2]])
If you wanted the count
, you just create an sapply
or lapply
call to run through the lists and get the count of each one. Or literally any other function you want.
In 2017 the answer is
library(dplyr)
library(tidyr)
gather(df, key, value, -owner) %>%
group_by(owner, key, value) %>%
tally %>%
spread(value, n, fill = 0)
Which gives output
Source: local data frame [4 x 4]
Groups: owner, key [4]
owner key loud quiet
* <dbl> <chr> <dbl> <dbl>
1 0 obs1 1 1
2 0 obs2 2 0
3 1 obs1 1 1
4 1 obs2 0 2
In 2019 the answer is:
gather(df, key, value, -owner) %>%
count(owner, key, value) %>%
spread(value, n, fill = 0)
You could use tidyr
with dplyr
library(dplyr)
library(tidyr)
df %>%
gather(observation, Val, obs1:obs2) %>%
group_by(owner,observation, Val) %>%
summarise(n= n()) %>%
ungroup() %>%
spread(Val, n, fill=0)
which gives the output
# owner observation loud quiet
#1 0 obs1 1 1
#2 0 obs2 2 0
#3 1 obs1 1 1
#4 1 obs2 0 2