2015-11-16 22 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") 
相关问题