基本上,一台机器会输出一些值,我需要能够运行此脚本来放入必要的标头,然后将其输入另一个程序。不幸的是,我无法更改输入或输出的格式。
这是我的代码,我将其简化到最低限度以复制我的错误,确信它确实很简单,这使我发疯了。我在此处https://files.fm/u/8jgde7kp
附加了输入的简化.txt文件。DATA <- file.choose()
DATA <- read.table(DATA, stringsAsFactors=FALSE, na.strings="--", header=FALSE, sep = "\t")
HDR <- file.choose()
HDR <- read.table(HDR, stringsAsFactors=FALSE, na.strings="--", header=FALSE, sep = "\t", fill = TRUE)
FULL <- rbind(HDR,DATA)
等等等
问题是由于某种原因,即使使用Fill = True,当它读入标头(也是由另一个程序生成)时,它也会丢弃最后一列并将其推到新行。实际上,第11行应该是第10行的第四列。显然,由于列的不同,rbind每次都不起作用。
因此,我导入标头数据的方式本质上是有问题的,目前我的解决方法是每次都进入并手动在第一行中输入更多标签。
重要说明:输入的列数始终会有所不同,具体取决于我们正在做的工作,但是无论如何,Header.txt的第10行和数据文件的列数总是相同。>
任何帮助将不胜感激。
答案 0 :(得分:0)
使用col.names
使用显式定义的列名:
> HDR <- read.table(
+ "Header.txt",
+ stringsAsFactors=FALSE,
+ na.strings="--",
+ header=FALSE,
+ col.names = paste0("V", 1:4), # <- here
+ sep = "\t",
+ fill = TRUE)
> HDR
V1 V2 V3 V4
1 [Header]
2 GSGT Version 2.0.3
3 Processing Date 6/29/2018 2:31 PM
4 Content CLassified
5 Num SNPs 9999
6 Total SNPs 9999
7 Num Samples 9999
8 Total Samples 9999
9 [Data]
10 SNP Name Sample ID Allele1 - AB Allele2 - AB
但是,正如注释中提到的那样,有一种比在输入中强制使用四列结构更好的方法。例如,您需要使用readLines
读取标题,然后将DATA附加到其中:
HDR <- readLines("Header.txt")
## save your result
resultFile <- "result.txt"
writeLines(HDR, resultFile)
write.table(DATA,
file = resultFile,
append = TRUE, # <- keeps previous content, i.e. HDR
col.names = FALSE)
答案 1 :(得分:0)
这可能是尝试通过强制转换为data.frame
或类似名称而不会损坏(标题或数据)结构的最佳方式。由于它正在被另一个程序读取,因此推测输出是否具有类data.frame
无关紧要。
header <- readLines("header.txt")
data <- readLines("data.txt")
fileConnection <- file("combined.txt")
writeLines(c(header, data), fileConnection)
close(fileConnection)
在这里,我们只是分别读取标题行和数据行,保留了它们各自的结构。然后c()
将它们连接在一起,并写出到.txt
。您可以添加新的行字符writeLines(c(header,"\n",data), fileConnection)
,以在标题和数据之间添加新行。
此外,无论标题或数据的行数/列数如何,这都应该起作用。标头和数据都保持制表符分隔。
[Header]
GSGT Version 2.0.3
Processing Date 6/29/2018 2:31 PM
Content CLassified
Num SNPs 9999
Total SNPs 9999
Num Samples 9999
Total Samples 9999
[Data]
SNP Name Sample ID Allele1 - AB Allele2 - AB
NGHS1 Sample1 A A
NGHS1 Sample1 A B