0

我得到了一个具有以下结构的统计输出文件:

> dput(x)
structure(list(V1 = c(0.236364, 0.032086, 0.062762, 0.095238, 
NaN, 0, 1, 2, 3, 4, 0.258706, 0.436735, 0.104167, 0.611336, 0.160279
), V2 = c(0.183333, 0.623333, 0.796667, 0.14, 0, NA, NA, NA, 
NA, NA, 0.67, 0.816667, 0.96, 0.823333, 0.956667), V3 = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("V1", 
"V2", "V3"), class = "data.frame", row.names = c(NA, -15L)) 

读取数据的链接: https ://docs.google.com/file/d/0BxSZDr4eTnb9aDhCOGRxVEV5aVE/edit?usp=sharing

数据属性:

  • 没有标题

  • 该文件使用特定的分隔符选项
    numeric[space][tab][space]numeric[space][tab][space] # 用于 2 个数字列组件

  • 行号可能明显不同,但对于组件 2 和 3 将始终相同


我需要将其拆分为每个组件的 data.frames:
1 个组件 - 第一个两列部分
2 个组件 - 1 个列部分
3 个组件 - 第二个两列部分

我找不到将类似数据文件拆分为 3 个组件的通用方法。

我找到了使用不同分隔符作为拆分对象的示例,但没有使用列号和分隔符选项的这种特殊情况。

请让我知道这个例子是否足够。我不确定分隔符选项与此特定问题的相关性如何。我认为不是。

4

2 回答 2

1

您可以先将 3 个字符分隔符转换为一个字符分隔符吗?

在命令行上,您可以尝试:

cat input.txt | sed 's/ \t /\t/g' > input2.txt

这将用“\t”替换所有“\t”

或者你可以在你最喜欢的 txt 编辑器中打开它并查找/替换所有

一旦分隔符采用标准格式,进一步处理就会容易得多

于 2013-03-22T19:35:49.347 回答
1

NA如果组件 1 或组件 3 数据的第二列中没有值,则rle可以在此处使用。如果我正确理解您的问题并且相关条件成立,基本方法是查看您共享的数据中“V2”列中值的运行。将返回一个逻辑向量,然后我们可以使用它来确定在哪里拆分数据:NAdputis.na(x$V2)rle

> RLE <- rle(is.na(x$V2))$lengths
> split(x, rep(seq(RLE), RLE))
$`1`
        V1       V2 V3
1 0.236364 0.183333 NA
2 0.032086 0.623333 NA
3 0.062762 0.796667 NA
4 0.095238 0.140000 NA
5      NaN 0.000000 NA

$`2`
   V1 V2 V3
6   0 NA NA
7   1 NA NA
8   2 NA NA
9   3 NA NA
10  4 NA NA

$`3`
         V1       V2 V3
11 0.258706 0.670000 NA
12 0.436735 0.816667 NA
13 0.104167 0.960000 NA
14 0.611336 0.823333 NA
15 0.160279 0.956667 NA
于 2013-03-23T05:29:24.803 回答