我已经搜索过并搜索过,但我仍然坚持认为我不确定的问题,我无法解决这个问题。
我有一个非常大的QPCR数据框,输出类似于下面的例子,除了有更多的患者和更多的检测器基因。我需要转换成宽格式,以便患者1(P1)在同一行中有相应的检测器和ct值。
Sample Detector Ct
P1 18s 9.428771
P1 18s 9.369728
P1 18s 9.456004
P1 b2m 12.792814
P1 b2m 12.580547
P1 b2m 13.162326
P2 18s 19.428771
P2 18s 19.369728
P2 18s 19.456004
P2 b2m 20.792814
P2 b2m 20.580547
P2 b2m 20.162326
我只能使用以下内容来转换第一个复制品:
reshape(data, direction = "wide", idvar='Sample', timevar='Detector')
但是不能转换重复值,因为它们与第1个名称相同。
我已经尝试了make.names
,但无法根据Detector和Sample的值来识别Detector。
感谢任何帮助。
编辑:
Martin问我希望数据看起来如何,下面是一个例子。我已经重命名了我的基因的列名,因为我知道这是R为了处理数据而需要它们的方式。 感谢Martin为我整理格式。
Sample X18s X18s.1 X18S.2 b2m b2m.1 b2m.2
P1 9.428771 9.369728 9.456004 12.792814 12.580547 13.162326
P2 19.428771 19.369728 19.456004 20.792814 20.580547 20.162326
答案 0 :(得分:1)
可能有帮助:
data$indx <-with(data, ave(Sample, Detector, Sample, FUN=seq_along))
reshape(data, direction="wide", idvar=c("Sample","indx"), timevar="Detector")[,-2]
# Sample Ct.18s Ct.b2m
#1 P1 9.428771 12.79281
#2 P1 9.369728 12.58055
#3 P1 9.456004 13.16233
#7 P2 19.428771 20.79281
#8 P2 19.369728 20.58055
#9 P2 19.456004 20.16233
你可以尝试:
library(reshape2)
dcast(data, Sample~Detector+indx, value.var="Ct")
Sample 18s_1 18s_2 18s_3 b2m_1 b2m_2 b2m_3
#1 P1 9.428771 9.369728 9.456004 12.79281 12.58055 13.16233
#2 P2 19.428771 19.369728 19.456004 20.79281 20.58055 20.16233
其他选项是使用dplyr
library(dplyr)
library(tidyr)
data%>%
unite(Det,Detector, indx,sep=".")%>%
spread(Det,Ct)
# Sample 18s.1 18s.2 18s.3 b2m.1 b2m.2 b2m.3
#1 P1 9.428771 9.369728 9.456004 12.79281 12.58055 13.16233
#2 P2 19.428771 19.369728 19.456004 20.79281 20.58055 20.16233
我在阅读数据时使用stringsAsFactors=F
,因此字符列不会被强制分解。如果我使用stringsAsFactors=T
或默认值,则:
data$indx <-with(data, ave(Sample, Detector, Sample, FUN=seq_along))
#Warning messages:
#1: In `[<-.factor`(`*tmp*`, i, value = 1:3) :
invalid factor level, NA generated
将上述步骤替换为:
data$indx <-with(data, ave(seq_along(Sample), Detector, Sample, FUN=seq_along))
dcast(data, Sample~Detector+indx, value.var="Ct")
# Sample 18s_1 18s_2 18s_3 b2m_1 b2m_2 b2m_3
#1 P1 9.428771 9.369728 9.456004 12.79281 12.58055 13.16233
#2 P2 19.428771 19.369728 19.456004 20.79281 20.58055 20.16233