聚合R中的 Dataframe 并按列进行比例

kninwzqo  于 2022-12-24  发布在  其他
关注(0)|答案(3)|浏览(127)

我有一个** Dataframe **如下:
| 年份|净额|费用|毛额|
| - ------| - ------| - ------| - ------|
| 二○一○年|小行星5637|小行星6749|小行星6849|
| 二○一一年|小行星5738|小行星2810|小行星5749|
| 二〇一二年|小行星4829|小行星5738|小行星5783|
| 二〇一三年|小行星9587|小行星6749|小行星5739|
| 二〇一四年|小行星4638|小行星6739|小行星6748|
我需要每年的列百分比:
| 年份|净额|费用|毛额|
| - ------| - ------| - ------| - ------|
| 二○一○年|XX %| XX %| XX %|
| 二○一一年|XX %| XX %| XX %|
| 二〇一二年|XX %| XX %| XX %|
| 二〇一三年|XX %| XX %| XX %|
| 二〇一四年|XX %| XX %| XX %|
这些百分比是按列显示的百分比。我编码如下:

percent = prop.table(as.matrix(test[2:4]), margin=2)

但是我没有得到年份栏。请帮助!

6uxekuva

6uxekuva1#

我们可以将mutateacross一起使用

library(dplyr)
test %>%
     mutate(round(100 *across(2:4, proportions), 2))
  • 输出
Year   Net  Cost Gross
1 2010 18.53 23.45 22.19
2 2011 18.86  9.76 18.62
3 2012 15.87 19.93 18.73
4 2013 31.51 23.45 18.59
5 2014 15.24 23.41 21.86

使用OP的代码,我们可以对第一列执行cbind

cbind(test[1], prop.table(as.matrix(test[2:4]), margin=2))

数据

test <- structure(list(Year = 2010:2014, Net = c(5637L, 5738L, 4829L, 
9587L, 4638L), Cost = c(6749L, 2810L, 5738L, 6749L, 6739L), Gross = c(6849L, 
5749L, 5783L, 5739L, 6748L)), class = "data.frame", row.names = c(NA, 
-5L))
rdlzhqv9

rdlzhqv92#

带有bind_cols的解决方案:

percent <- test[1] %>% bind_cols(as.data.frame(prop.table(as.matrix(test[2:4]), margin=2)))
des4xlb0

des4xlb03#

有很多方法可以做到这一点。如果你想尽可能多地保留你的代码,我会建议

test[2:4] <- prop.table(as.matrix(test[2:4]), margin = 2)

相关问题