使用 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, .)

;)