1

我有一些由 Windows 软件生成的数据输出。这是一个制表符分隔的 rtf 文件,但在导出时它会被传输到一长列数据中。我想使用 R 将其返回到数据框中以导出为制表符分隔,以便我可以轻松地分析数据:

基本上没有分隔符,但我知道在完成的文件中应该有 7 列,所以我希望数据框在 7 个条目进入后开始新行。

为了说明,输出如下所示:

>Sample  
>Location  
>Test  
>Mean  
>Stdev  
>Status  
>Points  
>A  
>A1  
>XX1  
>0.034541  
>0.04596  
>UN  
>0  
>B  
>A1  
>XX2  
>0  
>0  
>TA  
>1

我想将其解析为:

    >样本位置测试平均标准偏差状态点  
    >A A1 XX1 0.03 0.04 UN 0  
    >B A1 XX2 0 0 TA 1  

我不完全确定如何搜索这个,但我想做的最接近的例子是在这个例子中:
将列表的内容写入 R 中的一个文件

但我不知道如何将答案应用于我的数据,特别是设置宽度选项(我没有完全遵循,但可能是关于列号?),capture.output,以及我不知道的两个列表元素' t认为适用于此。

也对 BASH 或 awk 解决方案开放。

4

3 回答 3

4

这是一套完整的步骤,可带您完成。

  1. 正常读取文件

    d = read.table("/tmp/tmp.txt", header=FALSE, stringsAsFactors=FALSE)
    

    这给出了一个具有一列的数据框。

  2. 接下来我们改变行数和列数:

    d = unlist(d)
    dim(d) = c(7, nrow(d)/7)
    d = t(d)
    ##Or 
    d = matrix(as.matrix(d), ncol=7, byrow=TRUE)
    
  3. 然后我们删除“>”符号:

    d = gsub(">", "", d)
    

    在这里,我们将“>”替换为空“”

  4. 然后整理列标题:

    colnames(d) = d[1,]
    d = d[-1,]
    
于 2013-02-20T20:44:07.653 回答
2

我想你想要这样的东西:

# Read data
x<-read.table(textConnection('>Sample  
>Location  
>Test  
>Mean  
>Stdev  
>Status  
>Points  
>A  
>A1  
>XX1  
>0.034541  
>0.04596  
>UN  
>0  
>B  
>A1  
>XX2  
>0  
>0  
>TA  
>1'),stringsAsFactors=FALSE)
# Convert to matrix
mat<-matrix(as.matrix(x),ncol=7,byrow=TRUE)
# Dump as tab delimited
write.table(mat,'file.tab',sep='\t')
于 2013-02-20T20:37:10.433 回答
1

与其他解决方案类似,我保留它,因为还有进一步的处理:

matrix(gsub('>','',dat$V1),ncol=7,byrow=T)
colnames(dat) <- dat[1,]
> dat <- dat[-1,]
> dat
    Sample Location Test  Mean       Stdev     Status Points
[1,] "A"    "A1"     "XX1" "0.034541" "0.04596" "UN"   "0"   
[2,] "B"    "A1"     "XX2" "0"        "0"       "TA"   "1"   
于 2013-02-20T20:37:28.713 回答