0

これについて助けが必要です。再び数時間苦労しました.......

# open file for data connection
data <- file("data.log", open = "r")

# do readlines for the first
# there should be more than  500 lines for thousands of observations
rl <- readLines(data)

データに含まれていないラベル/ヘッダー: 時間、グループ、タスク、完了かどうか、時間、クレジット

[1]  10:00 A task1 comp 5:00 200                                                                
[2]  16:00 A task2 comp 3:00 100                                                                    
[3]  11:00 B task1 incomp 7:00 100                                                                                
[4]  17:00 B task2 comp 7:00 100                                                      
[5]  15:00 C task1 incomp 5:00 420                                               
[6]  19:00 C task2 comp 6:00 115  

したがって、行を抽出してまとめる必要があります。これは次のようになります。

[1]  10:00 A task1 comp 5:00 100                                                                
[2]  16:00 B task2 comp 3:00 100                                                                    
[3]  11:00 A task1 incomp 7:00 100                                                                                
[4]  17:00 B task2 comp 7:00 100                                                      
[5]  15:00 A task1 incomp 5:00 100                                               
[6]  19:00 B task2 comp 6:00 100 

私はいくつかの関数を書きましたが、これは実行する可能性が最も高いものの、まだエラーが発生しているものです。

fuc = function(filename = "data.log")
{
  rl = readLines(data)
  spl = strsplit(rl[-1], " ") #split data with spaces
  pattern = grep("A.* 100", spl, value = TRUE) #grep the lines that have group A and credit 100

  if(pattern !=0) #if the pattern grep is different from 0
  {
    pattern2 = grep("B.*100", spl, value = TRUE) #grep lines that have group B and credit 100 that follows pattern above
    if(pattern2 !=0) #if pattern2 is different from 0
      print(pattern) 
  }

この関数は正常に実行され、データで試します

fuc("data.log")

エラーが発生しました:

Error in if (pattern != 0) { : argument is of length zero

私は他の人から提案を受けました。すでにデータをstrsplitしているので、次のような方法でgrepできます

grep(x[2] == "A" & x[6] == "100", x[2] == "B" & x[6] == "100", spl, value = TRUE)

しかし、それは機能していません.....

私を助けてください

4

0 に答える 0