单列数据到多列圆柱形数据框,没有分隔符

时间:2013-02-20 20:29:16

标签: r dataframe

我有一些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

我想解析它:


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

我不完全确定如何搜索这个,但最接近我想做的例子就是这个例子:
writing contents of list to one file in R

但我无法弄清楚如何应用我的数据的答案,特别是设置宽度选项(我没有完全遵循,但可能是关于列号?),capture.output和两个列表元素我不认为适用于此。

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

3 个答案:

答案 0 :(得分: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,]
    

答案 1 :(得分: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')

答案 2 :(得分: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"