我有这个数据框,我想为每一行计算%
(例如)。我想在同一数据帧中转换此数据帧,但仅适用于%
。
就像这张图片一样:
我该怎么做?
数据:
dat <- data.frame(
county = c("FRANCIA", "GRECIA", "ITALIA"),
`310` = c(73, 165, 347),
`320` = c(13, 80, 118),
`330` = c(10, 57, 94),
`340` = c(28, 116, 177),
check.names = FALSE
)
答案 0 :(得分:0)
如果您特别想要包含%
符号,请尝试使用janitor包中的adorn_crosstab()
:
library(janitor)
dat %>%
adorn_crosstab(show_n = FALSE, digits = 0)
county 310 320 330 340
1 FRANCIA 59% 10% 8% 23%
2 GRECIA 39% 19% 14% 28%
3 ITALIA 47% 16% 13% 24%
如果您想将比例保留为numeric
- 等级,请参阅Calculate row-wise proportions。
(免责声明:我是这个函数的作者 - 但我认为这是获得理想结果的最快方法)
答案 1 :(得分:0)
基础包,使用prop.table
。首先,我们将数据帧转换为矩阵。然后返回使用cbind
恢复列Country的数据框。
cbind(Country = dat[, 1], as.data.frame(prop.table(as.matrix(dat[, 2:5]), 1)))
输出:
Country 310 320 330 340
1 FRANCIA 0.5887097 0.1048387 0.08064516 0.2258065
2 GRECIA 0.3947368 0.1913876 0.13636364 0.2775120
3 ITALIA 0.4714674 0.1603261 0.12771739 0.2404891