![](/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.