使用 dplyr 将多列数据帧重塑为单行
Reshaping multicolumn dataframe into single row with dplyr
我有一个看起来像这样的数据框
name value1 value2 value3
X 1 . 2 . 6
Y 2 . 5 . 7
有没有办法使用 dplyr 将其变成单行数据框?
x_value1 x_value2 x_value3 y_value1 y_value2 y_value3
我试过使用 spread,但它抱怨有多个列 value1 到 value3。
谢谢
c
我们可以通过 gather
转换成 'long' 格式,unite
'name','key' 列,然后 spread
library(tidyverse)
gather(df1, key, value, -name) %>%
unite(namekey, name, key) %>%
spread(namekey, value)
# X_value1 X_value2 X_value3 Y_value1 Y_value2 Y_value3
#1 1 2 6 2 5 7
因为 data.frame
只是一个列表列表,您不需要任何花哨的东西来做到这一点。普通的旧串联函数 c
可以为您完成。直接调用 c
是行不通的,因为那只会 return 数据框,但是 do.call
会将参数列表拼接到实际参数中,所以 do.call(c(df))
会做你想要的想要。
> df <- data.frame(x = rnorm(3), y = rnorm(3), z = rnorm(3))
> df
x y z
1 -0.02600453 1.5596611 0.1419269
2 0.61540806 1.0944946 0.7526085
3 -0.79033738 0.1369467 -0.1867725
> do.call(c, df)
x1 x2 x3 y1 y2
-0.02600453 0.61540806 -0.79033738 1.55966113 1.09449457
y3 z1 z2 z3
0.13694672 0.14192691 0.75260853 -0.18677246
如果您绝对想要使用dplyr
,那么我想您可以
df %>% do.call(c, .)
;)
我有一个看起来像这样的数据框
name value1 value2 value3
X 1 . 2 . 6
Y 2 . 5 . 7
有没有办法使用 dplyr 将其变成单行数据框?
x_value1 x_value2 x_value3 y_value1 y_value2 y_value3
我试过使用 spread,但它抱怨有多个列 value1 到 value3。
谢谢 c
我们可以通过 gather
转换成 'long' 格式,unite
'name','key' 列,然后 spread
library(tidyverse)
gather(df1, key, value, -name) %>%
unite(namekey, name, key) %>%
spread(namekey, value)
# X_value1 X_value2 X_value3 Y_value1 Y_value2 Y_value3
#1 1 2 6 2 5 7
因为 data.frame
只是一个列表列表,您不需要任何花哨的东西来做到这一点。普通的旧串联函数 c
可以为您完成。直接调用 c
是行不通的,因为那只会 return 数据框,但是 do.call
会将参数列表拼接到实际参数中,所以 do.call(c(df))
会做你想要的想要。
> df <- data.frame(x = rnorm(3), y = rnorm(3), z = rnorm(3))
> df
x y z
1 -0.02600453 1.5596611 0.1419269
2 0.61540806 1.0944946 0.7526085
3 -0.79033738 0.1369467 -0.1867725
> do.call(c, df)
x1 x2 x3 y1 y2
-0.02600453 0.61540806 -0.79033738 1.55966113 1.09449457
y3 z1 z2 z3
0.13694672 0.14192691 0.75260853 -0.18677246
如果您绝对想要使用dplyr
,那么我想您可以
df %>% do.call(c, .)
;)