![](/img/trans.png)
[英]How to use table() with dplyr group by, map from purrr and a list of dataframes/tibbles)? (In R)
[英]How can I paste values from two tibbles or dataframes together into a combined display table in R?
我有兴趣将两个不同表中的值显示为一个组合表,并在同一单元格中显示值和百分比。
我有两个数据框,
pf<-data.frame(alpha=c(17,42,19),beta=c(21,47,15),sea=c(19,43,21))
和
cf<-data.frame(alpha=c(417,242,119),beta=c(721,447,315),sea=c(819,443,921))
百分比以pf为单位,今年的原始值以cf 为单位。
我想要的输出是:
desired<-data.frame(alpha=c("417 (17%)","242 (42%)","119 (19%)"),
beta=c("721 (21%)","447 (47%)","315 (15%)"),
sea=c("819 (19%)","443 (43%)","921 (21%)"))
看起来像:
alpha beta sea
1 417 (17%) 721 (21%) 819 (19%)
2 242 (42%) 447 (47%) 443 (43%)
3 119 (19%) 315 (15%) 921 (21%)
我希望有一个不需要在代码中明确键入列名“alpha”等的解决方案,因为我的列在指向不同的源文件时会更改名称。 行数也会改变,尽管 pf 和 cf 在维度上总是相互匹配。
似乎乘法或其他基本数学函数(其中两个表彼此相关处理)很容易(即 pf*cf 快速返回执行关系乘法的值的表)。
在这一点上,我一直在试验 paste0() 但得到了不可行的结果。
预先感谢您的任何帮助!
我们可以使用purrr
map2
library(purrr)
map2_df(cf, pf, ~ sprintf("%d (%d%%)", .x, .y))
# A tibble: 3 x 3
# alpha beta sea
# <chr> <chr> <chr>
#1 417 (17%) 721 (21%) 819 (19%)
#2 242 (42%) 447 (47%) 443 (43%)
#3 119 (19%) 315 (15%) 921 (21%)
或者如果它是浮动的,那么我们可以round
map2_df(cf, pf, ~ sprintf("%d (%f%%)", .x, round(.y, 2)))
您使用mapply
和paste0
base
选项:
as.data.frame(mapply(function(x, y) paste0(x, "(", y, "%)"), cf, pf))
alpha beta sea
1 417(17%) 721(21%) 819(19%)
2 242(42%) 447(47%) 443(43%)
3 119(19%) 315(15%) 921(21%)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.