我有一个包含在.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)将此数据集放入行/列格式的不同方式?
非常感谢所有建议。
答案 0 :(得分:2)
stringr
开始, plyr
和readLines()
可以提供帮助:
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
我不完全确定您需要的结果数据框架如何,但reshape
或reshape2
可以让您完成剩下的工作。
答案 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的建议进一步处理案例名称。