我的数据框看起来像这样
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 ç
答案 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, .)
)