Вот решение, которое делает то, что вы хотите:
df %>%
group_by(lang) %>%
summarize(
prop = length(lang[answer==2])/n()
)
Здесь мы группируем переменную или переменные, которые вы хотите установить в качестве уникальных групп, для которых вы хотите получить пропорцию, и затем используете summarize
рассчитать длину вектора одной из переменных, где ответ равен 2, и разделить ее на количество строк в группировке.Если по какой-либо причине вам нужен столбец поддержки И столбец ответов, просто измените summarize
на mutate
.
Причина, по которой вы получили ошибку об отсутствии lang
, заключается в том, что count
необходимо использовать в качестве функции, такой как mutate, то есть
df %>%
count(lang, name = "Total")
Вы можете добиться того же, адаптируя свой код, но вы должны использовать add_count
(чтобы ваш столбец ответов был сохранен) или mutate(Total = n())
.Однако group_by был разработан для решения подобных проблем, и определенно стоит потратить некоторое время на изучение.
df %>%
add_count(lang, name = "Total") %>%
filter(answer == 2) %>%
add_count(lang, name = "Twos") %>%
distinct(lang, .keep_all = TRUE) %>%
mutate(prop = Twos/Total) %>%
select(lang, prop)