【问题标题】:Mutating values of subset of columns into percentage format将列子集的值更改为百分比格式
【发布时间】: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] &lt;- sapply(summary.table[,i], function(x) paste(x*100, '%'))}

标签: r dplyr


【解决方案1】:

我们需要使用包裹在median上的percent

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))

【讨论】:

  • 谢谢!如果我的数据集在行上而不是在列上具有中位数,我有什么办法可以做到这一点?
  • @ArthurCarvalhoBrito 不清楚您的要求。你是说一列中只有一些行需要转换吗?但是,如果你改变它,该类将只有该列的一个
  • 如果我有一张像我刚刚在问题上显示的那样的表格,有没有办法做类似的事情?
猜你喜欢
  • 2022-08-19
  • 1970-01-01
  • 2016-03-13
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
相关资源
最近更新 更多