按因子水平

时间:2016-03-30 20:52:32

标签: r

这可能是一个新手问题,但我到处搜索,找不到办法。我在R中有一个数据框,如下所示:

Target Sample Regulation
AKT1    00h    1.00000
AKT1    02h    1.27568
AKT1    06h   -1.29813
AKT1    12h    1.12357
AKT1    48h    1.02284
AKT2    00h    1.00000
AKT2    02h    1.08692
AKT2    06h    1.19489
AKT2    12h   -1.07677
AKT2    48h   -1.18955

data $目标和数据$ Sample是class = factor

我需要创建一个如下所示的表:

Target/Sample  AKT1     AKT2
00h            1.00000  1.00000
02h            1.27568  1.08692
06h           -1.29813  1.19489
12h            1.12357 -1.07677
48h            1.02284 -1.18955

换句话说,我需要创建一个新的数据框,其中列是数据$ Target级别,行是数据$ Sample级别,并用数据$ Regulation中的相应值填充它。

这是我能想到的:

newdata <- data.frame(Time=levels(data$Sample),
AKT1=as.numeric(data$Regulation[which(dat$Target=="AKT1",)]))

但当然我不想一个接一个地去,因为dat $ Target有> 100个级别(基因)。求救!

非常感谢你们!

2 个答案:

答案 0 :(得分:0)

您需要从长格式转换为宽格式。以下是使用reshape的替代方法:

reshape(df, idvar = "Sample", timevar = "Target", direction = "wide")
  Sample Regulation.AKT1 Regulation.AKT2
1    00h         1.00000         1.00000
2    02h         1.27568         1.08692
3    06h        -1.29813         1.19489
4    12h         1.12357        -1.07677
5    48h         1.02284        -1.18955

答案 1 :(得分:0)

我们可以使用tidyr

library(tidyr)
spread(df1, Target, Regulation)
#  Sample     AKT1     AKT2
#1    00h  1.00000  1.00000
#2    02h  1.27568  1.08692
#3    06h -1.29813  1.19489
#4    12h  1.12357 -1.07677
#5    48h  1.02284 -1.18955