将.txt文件读入R,未知分隔符,无列

时间:2014-04-27 02:08:01

标签: r

我有一个包含在.txt文件中的大型数据集,该数据集分为行,没有列。不幸的是,行按大小写聚类。看起来有点像这样:

v1(case1): a   
v2(case1): b
v3(case1): c

v1(case2): d
v2(case2): e
v3(case2): f

......等等。我尝试使用read.table将变量名与数据分开,使用以下命令:

data1 <- read.table("Data.txt", header = FALSE, sep = ":", fill=TRUE)

...但它并没有完全有效(即,在某些情况下,它将变量名称放在&#34; v1&#34;列中,在某些情况下它没有),导致这种情况:

V1            V2
1   v1case1   a
2   v2case1   b 
3   v3case1   c
4   v1case2   d
5   v2case2   e
6   v3case2   f
7            v1case3
8            v2case3
9            v3case3

有关更好的方法的任何建议a)将所有变量名称提取到一个单独的列中(这样我就可以使用它们创建新的变量,将使用&#34将每个变量的相关数据拉入一列; if / else&#34;)或b)将此数据集放入行/列格式的不同方式?

非常感谢所有建议。

2 个答案:

答案 0 :(得分:2)

如果您从stringr开始,

plyrreadLines()可以提供帮助:

library(stringr)
library(plyr)

dat <- readLines("rows.txt")
print(dat)
## [1] "v1(case1): a" "v2(case1): b" "v3(case1): c" "v1(case2): d" "v2(case2): e" "v3(case2): f"

x <- ldply(str_match_all(dat, "^([[:alnum:]]+)\\(([[:alnum:]]+)\\):\ +([[:alnum:]]+)"))[,2:4]
print(x)
##    2     3 4
## 1 v1 case1 a
## 2 v2 case1 b
## 3 v3 case1 c
## 4 v1 case2 d
## 5 v2 case2 e
## 6 v3 case2 f

我不完全确定您需要的结果数据框架如何,但reshapereshape2可以让您完成剩下的工作。

答案 1 :(得分:0)

仅使用基础R:

dat = as.data.frame(scan('Data.txt', sep = ':', 
                    what = list(case = character(), value = character()), 
                    strip.white = TRUE, blank.lines.skip = TRUE))

选项blank.lines.skip绕过空行问题。如果您需要,可以使用@hrbrmstr的建议进一步处理案例名称。