这可能是一个新手问题,但我到处搜索,找不到办法。我在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个级别(基因)。求救!
非常感谢你们!
答案 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