0

我有一个需要查看的家庭作业/作业问题,如果您能提供一些帮助,我们将不胜感激。

我有一个如下所示的文件:我只选择了前 20 行,因为有超过 250 行。

以下行告诉我们“NZ1”越过了起始线(在第 14 行 - 如下所示)

11:10:01 NZ1 越过起跑线

以下是终点线(第 109 行 - 下方未显示)

11:35:16 NZ1越过终点线

我需要做的是创建一个名为getTimes()的函数,它采用船的名称(例如 NZ1,US1 是船)并返回该船的开始和结束时间。

txtFile <- readLines("130901_chatter.txt")

txt文件[1:20]

[1]“Chatter Log,2013 年 9 月 1 日星期日”
[2]“Red Bull Youth AC,第 1 和 2 场比赛”
[3]“”
[4]“10:35:59 MDS redbull 游艇数据公开”
[5] "10:44:47 TIM Red Bull Youth America's Cup Race Day 1, Sun 1 Sep 2013"
[6] "10:45:03 WND Wind 255 at 14.2 kts, 14.2 kts peak"
[7] "10:45:41 TIM 第 1 场比赛于太平洋夏令时间 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 在 14.5 kts,16.7 kts 峰值”
[11] “11:05:03 WND Wind 245 在 13.8 kts,14.9 kts 峰值”
[12] “11:07:00 Race 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 越过起始线”
[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”而不是任何其他船。

任何帮助将不胜感激!

4

1 回答 1

1

哦男孩!...一个航行问题!这里的原则是识别文本中定义有用线的模式,然后分割线。看一眼

“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)
}

使用正则表达式模式可能有更巧妙的方法来完成这一切,但这是一个开始。您现在可以创建相应的结束时间函数并将其余部分串在一起以回答问题。

于 2013-10-20T20:16:14.420 回答