在R中转置多个变量的数据(最好用tidyverse或stargazer)。

问题描述 投票:0回答:1

我看到过类似的题目,但似乎都没有我想要的东西。如果这是一个重复的问题,请原谅。

从我的tidyverse函数中,我已经能够产生以下结果。

  locationAndYear  var1 var2  var3        var4  var5   var6
  <chr>           <dbl> <dbl> <dbl>       <dbl> <dbl>  <dbl>
1 City 2015       0.425 0.412 0.854       0.844 0.853  0.368
2 City 2016       0.270 0.259 0.842       0.834 0.856  0.456
3 City 2018       0.468 0.454 0.816       0.833 0.848  0.430
4 City 2019       0.336 0.604 0.842       0.852 0.887  0.525

我只是想把这个表格转置成这样 这样我就可以在RMarkdown文档中显示出来了。(也许在 stargazer 中有更好的方法可以做到这一点)

  variable     City 2015  City 2016   City 2018   City 2019
  var1             0.425      0.270       0.468       0.336
  var2             0.412      0.259       0.454       0.604
  var3             0.854      0.842       0.816       0.842
  var4             0.844      0.834       0.833       0.852
  var5             0.853      0.856       0.848       0.887
  var6             0.368      0.456       0.430       0.525

这基本上是为了一份报告--所以最终想用一个漂亮的表格格式来做,就像stargazer一样。

提前感谢任何建议!我看到过类似的主题,但似乎都没有我想要的东西。

r tidyverse transpose stargazer
1个回答
2
投票

获取长格式的数据,然后宽 。

library(tidyr)
df %>%
  pivot_longer(cols = -locationAndYear, names_to = 'variable') %>%
  pivot_wider(names_from = locationAndYear, values_from = value)

# variable  City_2015 City_2016 City_2018 City_2019
#  <chr>     <dbl>     <dbl>     <dbl>     <dbl>
#1 var1      0.425     0.27      0.468     0.336
#2 var2      0.412     0.259     0.454     0.604
#3 var3      0.854     0.842     0.816     0.842
#4 var4      0.844     0.834     0.833     0.852
#5 var5      0.853     0.856     0.848     0.887
#6 var6      0.368     0.456     0.43      0.525

使用 data.table :

library(data.table)
dcast(melt(setDT(df), id.vars = 'locationAndYear'), 
      variable~locationAndYear, value.var = 'value')

数据

df <- structure(list(locationAndYear = c("City_2015", "City_2016", 
"City_2018", "City_2019"), var1 = c(0.425, 0.27, 0.468, 0.336
 ), var2 = c(0.412, 0.259, 0.454, 0.604), var3 = c(0.854, 0.842, 
0.816, 0.842), var4 = c(0.844, 0.834, 0.833, 0.852), var5 = c(0.853, 
0.856, 0.848, 0.887), var6 = c(0.368, 0.456, 0.43, 0.525)), 
class = "data.frame", row.names = c(NA, -4L))
© www.soinside.com 2019 - 2024. All rights reserved.