数据重塑为CSV格式

3

我正在编写一个脚本来创建csv文件进行分析。运行脚本时,会为OPA 5701和6561各生成1个csv文件。这是脚本两部分之间唯一的区别。

##Samplesheet for GS0005701
rows<-unique(samples$Sample_Name)
samplesheet<-rows
opa.panels<-sort(unique(samples$Pool_ID))
for ( i in 1:length(opa.panels)){
  samps<-samples[samples$Pool_ID == opa.panels[i],]
  idx<-match(samps$Sample_Name,rows)
  samplesheet<-cbind(samplesheet,samps$Sentrix_ID[idx],samps$Sentrix_Position[idx])
}
colnames(samplesheet)[2:(length(opa.panels)*2+1)]<-c("SentrixBarcode_A","SentrixPosition_A","SentrixBarcode_B","SentrixPosition_B","SentrixBarcode_C","SentrixPosition_C","SentrixBarcode_D","SentrixPosition_D")[1:(length(opa.panels)*2)]
colnames(samplesheet)[1]<-"Sample_Name"
idx<-match(rows,samples$Sample_Name)
samplesheet<-cbind(samplesheet,samples[idx,c("Sample_Group","NorTum","Sample")])
ss_header<-c("[Header]","Investigator Name,Sander","Project Name,HNPCC_NA_MYH","Experiment Name,OPA1+2+3+4","Date,5062012","[Manifests]")
for (i in 1:length(opa.panels)) ss_header<-c(ss_header,paste(LETTERS[i],opa.panels[i],sep=","))
ss_header<-c(ss_header,"[Data]")
writeLines(ss_header,"Samplesheet5701.csv")
write.table(samplesheet,file="Samplesheet5701.csv",sep=",",row.names=FALSE,quote=FALSE,append=TRUE,na="")

##Samplesheet for GS0006561-OPA
rows2<-unique(samples2$Sample_Name)
samplesheet2<-rows2
opa.panels2<-sort(unique(samples2$Pool_ID))
for ( j in 1:length(opa.panels2)){
  samps2<-samples2[samples2$Pool_ID == opa.panels2[j],]
  idx2<-match(samps2$Sample_Name,rows2)
  samplesheet2<-cbind(samplesheet2,samps2$Sentrix_ID[idx2],samps2$Sentrix_Position[idx2])
}
colnames(samplesheet2)[2:(length(opa.panels)*2+1)]<-c("SentrixBarcode_A","SentrixPosition_A","SentrixBarcode_B","SentrixPosition_B","SentrixBarcode_C","SentrixPosition_C","SentrixBarcode_D","SentrixPosition_D")[1:(length(opa.panels)*2)]
colnames(samplesheet2)[1]<-"Sample_Name"
idx2<-match(rows2,samples2$Sample_Name)
samplesheet2<-cbind(samplesheet2,samples2[idx2,c("Sample_Group","NorTum","Sample")])
ss_header<-c("[Header]","Investigator Name,Sander","Project Name,HNPCC_NA_MYH","Experiment Name,OPA1+2+3+4","Date,5062012","[Manifests]")
for (j in 1:length(opa.panels2)) ss_header<-c(ss_header,paste(LETTERS[j],opa.panels2[j],sep=","))
ss_header<-c(ss_header,"[Data]")
writeLines(ss_header,"samplesheet6561.csv")
write.table(samplesheet2,file="Samplesheet6561.csv",sep=",",row.names=FALSE,quote=FALSE,append=TRUE,na="")

##样本表格GS0005701部分创建了一个data.frame。而##样本表格GS0006561则创建了一个matrix。使用相同的代码和相同的输入数据。

输入数据看起来像这样:

样本数据

复制粘贴:

    Sample  Sample_Name Sample_Group    NorTum  Sentrix_ID  Sentrix_Position    Pool_ID Folderdate
1   00-04193    00-04193N   HNPCC_UV    N   1495421 R007_C012   GS0006564-OPA   Exp060410
2   00-04193    00-04193N   HNPCC_UV    N   1495447 R007_C012   GS0006562-OPA   Exp060410
3   00-04193    00-04193N   HNPCC_UV    N   1495447 R007_C006   GS0006561-OPA   Exp060410
4   00-04193    00-04193N   HNPCC_UV    N   1495421 R007_C006   GS0006563-OPA   Exp060410
5   00-04193    00-04193N   HNPCC_UV    N   1460498 R007_C005   GS0006561-OPA   Exp060516
6   00-04193    00-04193N   HNPCC_UV    N   1460498 R007_C012   GS0006564-OPA   Exp060516

我知道这是一个不好回答的问题,但我希望有人能给我一些线索,说明为什么一个代码可以创建一个数据框,而另一个则创建了一个矩阵。

非常感谢您提前的帮助!


1
你能否用dput(head(samples))的输出替换数据图片(和混乱的复制粘贴部分)? - mnel
2
这个问题太混乱了。你应该尽量提供一个小的可重现的例子。但是回答 data.frame 和 matrix 的问题,最有可能的原因是一个输出包含数字和字符值的混合,而另一个只包含数字或字符(考虑到输入,后者更有可能)。 - Hansi
感谢您的回答,我已经找到了导致这个问题的原因。它与“match”语句有关,并且需要交换“idx<-match(rows,samps$Sample_Code)”部分。 - Sanshine
1
你能回答自己的问题吗?这样一来,一个好的答案就会被提供出来,人们也可以看到这个问题已经得到了解答。 - Paul Hiemstra
1个回答

1
这个问题的正确答案是在索引部分进行交换。
idx<-match(samps$Sample_Name,rows)

被更改为:

idx<-match(rows,samps$Sample_Code) 

这样行的长度就与Sample_Code的长度相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接