在 R 多变量中转置数据(最好使用 tidyverse 或 stargazer)
Transpose data in R multiple variables (preferrably with tidyverse or stargazer)
我看过类似的主题,但 none 似乎正是我要找的。如果这是一个重复的问题,我们深表歉意。
从我的 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
我只想转置它,使 table 看起来像这样,这样我就可以在 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
这基本上是为了一份报告 - 所以最终想以一种很好的 table 格式来做这件事,比如 stargazer。
提前感谢您的任何建议!
以长格式获取数据,然后以宽格式获取数据:
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))
我看过类似的主题,但 none 似乎正是我要找的。如果这是一个重复的问题,我们深表歉意。
从我的 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
我只想转置它,使 table 看起来像这样,这样我就可以在 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
这基本上是为了一份报告 - 所以最终想以一种很好的 table 格式来做这件事,比如 stargazer。
提前感谢您的任何建议!
以长格式获取数据,然后以宽格式获取数据:
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))