【发布时间】:2017-07-12 02:35:00
【问题描述】:
我根据下面的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))
【问题讨论】:
-
为什么要将
median显示为百分比?中位数总是在数据的 50% 上。 -
变量本身就是一个百分比。
-
那为什么不
summary.table[,7:9]*100呢?还是我误解了你想要什么? -
我想它也能做我想要的,即使它没有给我百分号
-
你为什么不试试这个?
for(i in 7:9){summary.table[,i] <- sapply(summary.table[,i], function(x) paste(x*100, '%'))}