繁体   English   中英

如何将两个小标题或数据帧中的值粘贴到 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)))

您使用mapplypaste0 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM