我有一个需要查看的作业/作业问题,如果你能提供一些帮助,我将非常感激。
我有一个如下所示的文件: 我只选择了前20行,因为有超过250行。
以下一行告诉我们“NZ1”越过起跑线(第14行 - 如下所示)
11:10:01 NZ1交叉起跑线
以下是终点线(第109行 - 未在下面显示)
11:35:16 NZ1越过成品线
我需要做的是创建一个名为 getTimes()的函数,该函数采用船的名称(例如NZ1,US1是船)并返回该船的开始和结束时间船。
txtFile< - readLines(“130901_chatter.txt”)
txtFile [1:20]
[1]“Chatter Log,2013年9月1日星期日”
[2]“红牛青年AC,比赛1& 2” [3]“” [4]“10:35:59 MDS redbull游艇数据公开”
[5]“10:44:47 TIM红牛青少年美洲杯赛第1天,2013年9月1日星期日” [6]“10:45:03 WND Wind 255 at 14.2 kts,14.2 kts peak”
[7]“10:45:41 TIM比赛1从PDT 11:10开始,10场比赛,7条腿” [8]“10:46:58 GER Yankee Flag”
[9]“10:47:12 UMP GER No Penalty”
[10]“10:55:03 WND Wind 255 at 14.5 kts,16.7 kts peak” [11]“11:05:03 WND Wind 245 at 13.8 kts,14.9 kts peak”
[12]“11:07:00比赛1(GER,SUI,NZ2,US1,US2,POR,FRA,AUS,NZ1,SWE):警告,3:00开始” [13]“11:10:00比赛1(GER,SUI,NZ2,US1,US2,POR,FRA,AUS,NZ1,SWE):开始”
[14]“11:10:01 NZ1 Crossed Start Line”
[15]“11:10:01 US1交叉起跑线”
[16]“11:10:01 US2交叉起跑线”
[17]“11:10:02 FRA越过起跑线”
[18]“11:10:02 GER交叉起跑线”
[19]“11:10:02 SUI越过起跑线”
[20]“11:10:02 NZ2越过起跑线”
请您查看下面的代码吗?
startResults <- function(filenames){
filess <- readLines(filenames)
startLines <- grep("NZ1 Cross", filess)
startText <- filess[startLines]
leelee <- startText[1:2]
ohSeung<-substr(leelee, 1,9)
}
crossStart<-startResults("130901_chatter.txt")
getTimes<-function(raceIDs){
raceIDs = crossStart
return(raceIDs)
}
getTimes("NZ1")
如果我运行上面的代码,我会得到NZ1的结果。但是,我需要得到其他船只的结果,但不太确定如何获得它。
哦,这就是我的raceID的样子:
raceIDs
[1]“GER”“SUI”“NZ2”“US1”“US2”“POR”“FRA”“AUS”“NZ1”“SWE”
如果功能正确(船的开始时间和结束时间),我应该得到类似的东西:
> getTimes("NZ1")
[1] "11:10:01" "11:35:16"
> getTimes("US1")
[1] "11:10:01" "11:33:29"
> getTimes("NZ2")
[1] "11:10:02" "11:34:12"
我相信我的功能只计算“NZ1”而不是任何其他船只。
非常感谢任何帮助!
答案 0 :(得分:1)
Oboy! ......航海问题!这里的原则是识别文本中定义有用行的模式,然后对行进行分段。看看
“11:10:01 NZ1 Crossed Start Line”和随后的那些,然后看到所有带有用数据的行都有“Crossed”。他们有时间模式和团队缩写的模式。首先使用grepl
创建一个逻辑向量,该向量是特定船只的“起始线”。使它比你到目前为止更加通用,这样你就可以使用sapply传递船ID的向量:
# You already have the text in memory, so no need to load it every time
startResults <- function( boatID){
startLines <- grepl(paste(boatID, "Cross", sep=" "), txtFile)
startText <- txtFile[startLines]
## leelee <- startText[1:2] # that looks wrong
substr(startText, 1,9)
}
使用正则表达式模式可能有更方便的方法,但这是一个开始。现在,您可以创建相应的结束时间函数,并将其余部分串联起来以回答问题。