2016-11-09 69 views
2

导入数据集,我试图导入R中的数据集,看起来像这样:在特定渠道 -

segment 1 rank 1 points 10 
11.11111 22.22222  
33.33333 44.44444 
...  ...  
99.99999 99.99999  
segment 2 rank 4 points 40 
12.12345 45.56789 
...  ... 
98.76543 54.43211 

对数据集进行分段,都具有一个等级和一些对价值的分裂。对的数量由'点'变量表示。

例如,我尝试了很多不同的方式导入这个数据集,例如使用scan(),read.table()read.csv()。我也用这些导入方法尝试了许多不同的选项,但它们都没有正常工作。

使用read.table()功能,我不断地得到了以下错误:

Line 2 did not have 6 elements

截至目前我管理的导入数据集中的方式如下:

read.table(DF, fill=TRUE) 

但是这种方式在R中的数据集由于填充选项,完全散布缺失的值,使得使用数据集非常乏味。

我该如何以更清晰的方式导入数据集?所以我可以消除遗漏的领域。 例如:

Segment Rank Points Value1 Value2 
1  2 10  11.111 22.222 
1  2 10  33.333 44.444 
...  ... ... ... ... 
22  4 60  88.888 99.999 
+0

请提供可再现的例子。或您正在尝试加载的文件? – Prradep

回答

1

你的任务不仅仅是在数据读取更多。你也试图重新格式化它。 readLines将导入数据作为一个向量。你可以从那里排序一切。

pull <- function(s) { 
    .s <- str_extract(dat[indx], paste0("(?<=",s,").*?\\d+")) 
    as.numeric(rep(.s, (rle(grps)$lengths-1))) 
} 

library(stringr) 
dat <- readLines("ex.data") 
indx <- grep("segment", dat) 
grps <- cumsum(1:length(dat) %in% indx) 
labels <- sapply(c("segment", "rank", "points"), pull) 
nums <- do.call("rbind", str_split(trimws(dat[-indx]), " ")) 
data.frame(labels, values=unlist(nums)) 
# segment rank points values.1 values.2 
# 1  1 1  10 11.11111 22.22222 
# 2  1 1  10 33.33333 44.44444 
# 3  1 1  10  56.2 49.95662 
# 4  1 1  10  46.9 50.00784 
# 5  1 2  10  50.7 48.55493 
# 6  1 2  10  53.6 48.70022 
# 7  1 2  20  42.7 52.51411 
# 8  1 2  20  51.5 47.53790 
# 9  1 2  20  50.0 50.22578 
# 10  2 3  30  50.3 49.68094 
# 11  2 3  30  50.4 49.78991 
# 12  2 3  30 99.99999 99.99999 
# 13  2 5  60 12.12345 45.56789 
# 14  2 5  60 98.76543 54.43211 

示例数据

cat("segment 1 rank 1 points 10 
11.11111 22.22222  
33.33333 44.44444 
56.2 49.95662 
46.9 50.00784 
segment 1 rank 2 points 10 
50.7 48.55493 
53.6 48.70022 
segment 1 rank 2 points 20 
42.7 52.51411 
51.5 47.53790 
50.0 50.22578 
segment 2 rank 3 points 30 
50.3 49.68094 
50.4 49.78991 
99.99999 99.99999  
segment 2 rank 5 points 60 
12.12345 45.56789 
98.76543 54.43211", file="ex.data") 
+0

非常感谢您帮助我!这正是我想要的! –

0

试试这个:

read.delim(filename, header=TRUE, sep="\t")