Преобразование значений подмножества столбцов в процентный формат

Я создал эту сводную таблицу на основе приведенного ниже df.

set.seed(1)
df <- data.frame(rep(
 sample(c(2012,2016),10, replace = T)),
 sample(c('Treat','Control'),10,replace = T),
 runif(10,0,1),
 runif(10,0,1),
 runif(10,0,1))

colnames(df) <- c('Year','Group','V1','V2','V3')

summary.table = df %>% 
group_by(Year, Group) %>%
group_by(N = n(), add = TRUE) %>% 
summarise_all(funs(sd,median)) %>%
ungroup %>%
mutate(Year = ifelse(duplicated(Year),"",Year))

Есть ли способ отобразить значения, относящиеся к столбцам median, в виде процентов?

Я не знал, как использовать mutate() и scales::percent() только для подмножества столбцов (я не хочу делать это индивидуально, поскольку в исходном наборе данных будет больше столбцов, что делает эту процедуру недостаточно практичной.

Что мне следовало сделать вместо этого, если я хотел изменить в соответствии с подмножеством строк?

Спасибо


РЕДАКТИРОВАТЬ:

А если бы это было так?

summary.table = df %>% 
group_by(Year, Group) %>%
summarise_all(funs(median,sd)) %>% 
gather(key, value, -Year, -Group) %>%
separate(key, into=c("var", "stat")) %>%
unite(stat_Group, stat, Group) %>%
spread(stat_Group, value) %>%
ungroup %>%
mutate(Year = ifelse(duplicated(Year),"",Year))

person Arthur Carvalho Brito    schedule 12.07.2017    source источник
comment
Почему вы хотите показать median в процентах? Медиана всегда составляет 50% от данных.   -  person Luís Telles    schedule 12.07.2017
comment
Сама переменная - это процент.   -  person Arthur Carvalho Brito    schedule 12.07.2017
comment
Так почему бы не сделать summary.table[,7:9]*100? Или я неправильно понимаю, чего вы хотите?   -  person Luís Telles    schedule 12.07.2017
comment
Я предполагаю, что он делает то, что я хочу, даже если он не дает мне знака процента, кроме   -  person Arthur Carvalho Brito    schedule 12.07.2017
comment
Почему бы тебе не попробовать это? for(i in 7:9){summary.table[,i] <- sapply(summary.table[,i], function(x) paste(x*100, '%'))}   -  person Luís Telles    schedule 12.07.2017


Ответы (1)


Нам нужно использовать percent, завернутый в median

summary.table <- df %>% 
                  group_by(Year, Group) %>%
                  group_by(N = n(), add = TRUE) %>% 
                  summarise_all(funs(sd=sd(.),median=scales::percent(median(.)))) %>%
                  ungroup %>%
                  mutate(Year = ifelse(duplicated(Year),"",Year))
person akrun    schedule 12.07.2017
comment
Спасибо! Есть ли способ сделать это, если бы в моем наборе данных были медианы по строкам, а не по столбцам? - person Arthur Carvalho Brito; 12.07.2017
comment
@ArthurCarvalhoBrito Не совсем ясно по вашему запросу. Вы говорите, что нужно преобразовать только некоторые строки в столбце? Но если вы измените это, класс будет только один для этого столбца. - person akrun; 12.07.2017
comment
Есть ли способ сделать что-то подобное, если у меня есть таблица, подобная той, которую я только что показал в вопросе? - person Arthur Carvalho Brito; 12.07.2017