制作3x3 data.frame的单行

时间:2018-10-03 11:29:07

标签: r

我有以下数据。frame

  example.df <- data.frame(target.condition = c("congruent", "incongruent", "neutral"),
                       sdGY.2 = sample(20:30, 3, replace = T),
                       sdGX.2 = sample(20:30, 3, replace = T))

我希望得到以下结果:

 congruent.sdGY.2 congruent.sdGX.2 incongruent.sdGY.2 incongruent.sdGX.2 neutral.sdGY.2 neutral.sdGX.2
1               28               29                 20                 23             27             29

我通过使用

做到了这一点
  test <- data.frame(congruent.sdGY.2 = example.df$sdGY.2[1], congruent.sdGX.2 = example.df$sdGX.2[1],
                 incongruent.sdGY.2 = example.df$sdGY.2[2], incongruent.sdGX.2 = example.df$sdGX.2[2],
                 neutral.sdGY.2 = example.df$sdGY.2[3], neutral.sdGX.2 = example.df$sdGX.2[3])

我想有一个更简单的方法,对吗?


谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用tidyverse中的tidyrdplyr软件包进行此操作。首先更改结构,使sdGX.2和sdGY.2都位于不同行的同一列中,然后将列名称组合在一起,然后更改结构,使其具有许多列。

 library(dplyr)
 library(tidyr)

 example.df %>% 
   gather(ColName, ResultValue, -target.condition) %>% 
   unite(NewColName, c("target.condition", "ColName"), sep = ".", remove = TRUE) %>% 
   spread(NewColName, ResultValue)