我有以下数据。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])
我想有一个更简单的方法,对吗?
谢谢!
答案 0 :(得分:2)
您可以使用tidyverse中的tidyr
和dplyr
软件包进行此操作。首先更改结构,使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)