У меня есть данные, дающие мне процент людей в некоторых группах с различным уровнем образования:
df <- data_frame(group = c("A", "B"),
no.highschool = c(20, 10),
high.school = c(70,40),
college = c(10, 40),
graduate = c(0,10))
df
# A tibble: 2 x 5
group no.highschool high.school college graduate
<chr> <dbl> <dbl> <dbl> <dbl>
1 A 20. 70. 10. 0.
2 B 10. 40. 40. 10.
Например, в группе А 70% людей имеют среднее образование.
Я хочу сгенерировать 4 переменные, которые дают мне долю людей в каждой группе с уровнем образования меньше, чем каждый из 4 (например, lessthan_no.highschool, lessthan_high.school и т. Д.).
желаемый df будет:
desired.df <- data.frame(group = c("A", "B"),
no.highschool = c(20, 10),
high.school = c(70,40),
college = c(10, 40),
graduate = c(0,10),
lessthan_no.highschool = c(0,0),
lessthan_high.school = c(20, 10),
lessthan_college = c(90, 50),
lessthan_graduate = c(100, 90))
По моим фактическим данным, у меня много групп и гораздо больше уровней образования. Конечно, я мог бы делать это по одной переменной за раз, но как я могу сделать это программно (и элегантно) с помощью tidyverse
инструментов?
Я бы начал с того, что сделал что-то вроде mutate_at()
внутри map()
, но я запутался в том, что список суммируемых переменных различен для каждой из новых переменных. Вы можете передать список новых переменных и соответствующие им переменные, которые будут суммироваться в виде двух списков, в pmap()
, но не совсем очевидно, как сгенерировать этот второй список в сжатой форме. Интересно, есть ли какое-нибудь решение для гнездования ...
desired.df
у вас есть переменнаяless.than.hs
. Разве это не должно бытьno.highschool
? - person Rui Barradas   schedule 26.08.2018tidyverse
, поэтому я был занят кодированием базового R-способа. Было бы интересно? - person Rui Barradas   schedule 26.08.2018