在R中重塑数据框

时间:2015-01-21 07:10:33

标签: r dataframe reshape

我已经尝试在网站上寻找解决方案,但重塑数据仍然困扰着我。我希望有人可以帮忙! :) 基本上,我的数据看起来像这样:

Item Condition1 Condition2 Condition3
A    1          2          3
B    1          2          3
C    1          2          3
D    1          2          3

我希望它看起来像这样

Item Condition
A    1
A    2
A    3
B    1
B    2
B    3
C    1
C    2
C    3
D    1
D    2
D    3

根据我的理解,似乎可以通过多种方式实现这一目标,但我还没有发现一种有效的方法!

2 个答案:

答案 0 :(得分:6)

是。在R中有几种方法可以做到这一点。这里有几个。

获取您在问题中指定的订单的选项

library(data.table)
as.data.table(mydf)[, list(Condition = unlist(.SD)), by = Item]

library(splitstackshape)
merged.stack(mydf, var.stubs = "Condition", 
             sep = "var.stubs")[, .time_1 := NULL][]

data.frame(Item = rep(mydf[[1]], 
                      each = ncol(mydf[-1])), 
           Condition = c(t(mydf[-1])))

需要一个步骤来删除列或重新排序行的选项

reshape(mydf, direction = "long", idvar = "Item",
        varying = 2:ncol(mydf), sep = "")

cbind(mydf[1], stack(mydf[-1]))

library(tidyr)
gather(mydf, var, val, Condition1:Condition3)

答案 1 :(得分:1)

require(reshape2)

df<-data.frame(Item=LETTERS[1:4],
               Condition1=1,
               Condition2=2,
               Condition3=3)
reshapedf<-melt(df,id=1)[-2]
reshapedf<-reshapedf[with(reshapedf,order(Item)),]
colnames(reshapedf)[2]<-"Condition"

我确信还有其他方法可以做到这一点。探索并享受乐趣:)