如何解析自定义格式的文件R.

时间:2014-02-14 07:44:51

标签: r parsing graph

这是一个刚刚开始工作的急躁的人提出的问题。 我有一个包含这样的行的文件:

simulation_time:386300;real_time:365;agents:300

simulation_time:386800;real_time:368;agents:300

simulation_time:386900;real_time:383;agents:300

simulation_time:387000;real_time:451;agents:300

simulation_time:387100;real_time:345;agents:300

simulation_time:387200;real_time:327;agents:300

simulation_time:387300;real_time:411;agents:300

simulation_time:387400;real_time:405;agents:300

simulation_time:387500;real_time:476;agents:300

simulation_time:387600;real_time:349;agents:300 

....

需要从文件中绘制图表。 This link教授如何通过以表格格式读取文件来绘制文件。但上面的行不是表格式或整齐的csv格式。

你能告诉我如何解析这样的文件吗?

此外,如果你有像我这样的急躁者的参考,请告诉我。

感谢

2 个答案:

答案 0 :(得分:4)

对于那种确切格式的数据:

d = read.csv(textConnection(gsub(";",":",readLines("data.csv"))),sep=":",head=FALSE)[,c(2,4,6)]

产生

       V2  V4  V6
1  386300 365 300
2  386800 368 300
3  386900 383 300
4  387000 451 300

然后,您可以使用names(d)=c("sim","real","agents")为数据框指定名称。

它的工作原理是将文件读入字符向量,替换“;”使用“:”,所以所有内容都以“:”分隔,然后使用read.csv将该文本读入数据框,然后仅使用数据列,而不是重复的文本列。

答案 1 :(得分:3)

如果文件的结构很严格,那么您可以自定义读数以获取所需的数据。 请参阅下面的代码。

# reading the file 
strvec = readLines(con = "File.txt", n = -1)  
# strsplit by ";" or ":"
strlist = strsplit(strvec,":|;")
# changing to matrix (works only if the structure of each line is the same)
strmat = do.call(rbind, strlist)
# lets take only numbers
df = strmat[ ,c(2,4,6)]
# defining the names
colnames(df) = strmat[1 ,c(1,3,5)]
# changing strings to numerics (might be better methods, have any suggestions?)
df = apply(df, 2, as.numeric)
# changing to data.frame
df = as.data.frame(df)
# now you can do that ever you want
plot(df$simulation_time, type="l")