使用dplyr将多列数据帧重新整形为单行

时间:2018-03-20 09:24:16

标签: r dplyr reshape

我的数据框看起来像这样

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

我尝试使用传播,但它抱怨多列value1到value3。

THX ç

2 个答案:

答案 0 :(得分:1)

我们可以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

答案 1 :(得分:0)

由于data.frame只是一个列表列表,因此您不需要任何想要执行此操作的内容。普通的旧连接函数c可以为您完成。直接调用c无法正常工作,因为这只会返回数据框,但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, .)

相关问题