Один из подходов состоит в том, чтобы преобразовать данные в «длинный» формат, что облегчит простой подсчет вхождений ваших меток, а затем spread
их в желаемый формат.
df.count <- df %>%
gather(variable, value) %>%
group_by(variable, value) %>%
count %>%
spread(variable, n)
value v1 v2
<chr> <int> <int>
1 never 1 1
2 often 2 2
3 rarely 1 2
4 sometimes 2 1
Конечно, dplyr
не является строго обязательным:
df2 <- sapply(df, table)
Создает именованную матрицу, в отличие от фрейма данных:
v1 v2
never 1 1
often 2 2
rarely 1 2
sometimes 2 1
И немного больше работы вы можете включитьэто во фрейм данных:
df2 <- sapply(df, table) %>%
as.data.frame %>%
rownames_to_column(var = 'level')