2015-11-16 36 views
0

我有晚些時候發生的輸入和相關輸出。有時1個輸入可能會導致多個輸出。我希望在同一行(在輸入的時刻)有與該輸入相關的輸入和第一個輸出。因此,我將不得不從輸入時間行開始找到第一個非空的單元格。R - 如何查找從特定行開始的列中不是空的第一個單元格

這是我的數據集:

time event result_of event 
11:15 input1 
11:16  
11:17  
11:18  output1 
11:19  
11:20  output2 
11:21 input2 
11:22  output3 
11:23  
11:24 input3 
11:25  
11:26  output4 
11:27 input4 
11:28  
11:29  output5 

,這是我想要的結果:

time event result_of event 
11:15 input1 output1 
11:16  
11:17  
11:18  
11:19  
11:20  
11:21 input2 output3 
11:22  
11:23  
11:24 input3 output4 
11:25  
11:26  
11:27 input4 output5 
11:28  
11:29  

的代碼應具有靈活性,從某種意義上說,可能有很多行的輸入和輸出之間,所以它應該始終檢查從當前行開始直到最後一行的非空單元格。

預先感謝您!

+0

你能分享一個可重現的例子嗎? –

+0

具體而言,你可以發佈(在你的問題中)'dput(mydata)'(其中'mydata'是你的數據框)的輸出。這將使我們更容易在R會話中加載數據。 – eipi10

+0

我很困惑... –

回答

0
# get the data 
lines = readLines("file.txt") 

# get the input and output line numbers 
inputs = grep(".{8}i", lines) 
outputs = grep(".{12}o", lines) 

# find the first output after each input 
n_inputs = length(inputs) 
outputs1 = vector(length = n_inputs) 
for (x in 1:n_inputs) { 
    outputs1[x] = outputs[which(outputs > inputs[x])[1]] 
} 

# rearrange the data 
outputs_text = substr(lines[outputs1], 13, 19) 
lines[inputs] = paste0(lines[inputs], outputs_text) 
lines[-inputs] = substr(lines[-inputs], 1, 5) 

lines[1] = "time event result_of event" 
writeLines(lines, "newfile.text") 
相關問題