这是一个刚刚开始工作的急躁的人提出的问题。 我有一个包含这样的行的文件:
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格式。
你能告诉我如何解析这样的文件吗?
此外,如果你有像我这样的急躁者的参考,请告诉我。
感谢
答案 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")