【问题标题】:Transpose data in R multiple variables (preferrably with tidyverse or stargazer)在 R 多个变量中转置数据(最好使用 tidyverse 或 stargazer)
【发布时间】:2020-05-12 01:12:51
【问题描述】:

我见过类似的主题,但似乎没有一个完全符合我的要求。抱歉,如果这是一个重复的问题。

通过我的 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 文档中呈现它。 (也许在观星者中有更好的方法来做到这一点)

  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】:

获取长格式数据,然后是宽格式:

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))

【讨论】:

  • 感谢您的快速响应!这样就可以了
猜你喜欢
  • 2023-04-06
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2021-03-08
  • 2016-07-01
  • 1970-01-01
相关资源
最近更新 更多