如何创建与此示例相关的函数(R Programming)

时间:2013-10-20 07:43:08

标签: r

我有一个需要查看的作业/作业问题,如果你能提供一些帮助,我将非常感激。

我有一个如下所示的文件: 我只选择了前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”而不是任何其他船只。

非常感谢任何帮助!

1 个答案:

答案 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)
}

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