簡體   English   中英

如何從R中的多個data.frames創建一個pivot表寫入excel?

[英]How to create a pivot table from multiple data.frames in R to write to excel?

我有多個具有相同列數的 data.frames。 我想將這些組合成一個 pivot 表,我可以將其寫入 excel。示例數據幀:

> net_imports[,1:5]
                 1979 1980 1981 1982     1983
beginning_stocks   NA  -53  -83 -110  -60.000
production         NA -390 -585 -510 -434.996
consumption        NA  370  380  390  410.000
ending_stocks      53   83  110   60   46.000
predicted          NA   10 -178 -170  -38.996

> area_harvested_output[,1:5]
                         1979        1980        1981        1982        1983
area_harvested_lag   51.22632  51.2263243  41.6213885  57.6296148  54.4279695
area_harvested_trend  0.00000   0.1007849   0.2015699   0.3023548   0.4031397
import_price_cpi           NA  20.4610740  18.7566970  16.8987151  15.2273790
predicted                  NA  71.7881832  60.5796553  74.8306847  70.0584883
error                      NA  58.2118168 119.4203447  95.1693153  99.9415117
pred_err                   NA 130.0000000 180.0000000 170.0000000 170.0000000

我希望 excel 中的結果表看起來像這樣

我希望 excel 中的結果表看起來像這樣。

基本上,我只想將 .net_imports" 和 "area_harvested_output" 之類的變量名稱維護為分組數據。

我將pivot_longer兩個 data.frames 都變長,這樣那一年就變成了一個而不是(在你的例子中)五列, rbindbind_rows它們並將累積的長表導出到 Excel(然后我將在其中構建交互式 Excel pivot桌子)。

您的示例數據:


net_imports <- structure(list(parameter = c("beginning_stocks", "production", 
"consumption", "ending_stocks", "predicted"), X1979 = c(NA, NA, 
NA, 53L, NA), X1980 = c(-53L, -390L, 370L, 83L, 10L), X1981 = c(-83L, 
-585L, 380L, 110L, -178L), X1982 = c(-110L, -510L, 390L, 60L, 
-170L), X1983 = c(-60, -434.996, 410, 46, -38.996)), class = "data.frame", row.names = c(NA, 
5L))

area_harvested_output <- structure(list(parameter = c("area_harvested_lag", "area_harvested_trend", "import_price_cpi", "predicted", "error", "pred_err"), X1979 = c(51.22632, 
0, NA, NA, NA, NA), X1980 = c(51.2263243, 0.1007849, 20.461074, 
71.7881832, 58.2118168, 130), X1981 = c(41.6213885, 0.2015699, 
18.756697, 60.5796553, 119.4203447, 180), X1982 = c(57.6296148, 
0.3023548, 16.8987151, 74.8306847, 95.1693153, 170), X1983 = c(54.4279695, 
0.4031397, 15.227379, 70.0584883, 99.9415117, 170)), class = "data.frame", row.names = c(NA, 
6L))

代碼:


library(dplyr)
library(tidyr)
library(rio) ## convenience package for imports/exports

long_table <- 
  net_imports %>%
  pivot_longer(cols = -parameter,
               names_to = 'year') %>%
  bind_rows(
    area_harvested_output %>%
    pivot_longer(cols = -parameter,
                 names_to = 'year')
  )

long_table %>% export('long_table.xlsx')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM