2017-04-06 19 views
1

我最近開始學習R.我基本上有一張表,我想以特殊的方式重新排列,這對我來說很難解釋,沒有一個例子。因此,這裏是我的表:R以特定的方式重新排列我的表

| user | event | Line | 

| use1 | enter | 1 
| use1 | enter | 2 
| use1 | login | 3 
| use1 | enter | 4 
| use1 | enter | 5 
| use1 | enter | 6 
| use1 | login | 7 
| use2 | login | 8 
.... 

所以基本上我想要做的就是尋找一切事件等於登錄並使用最新的匹配它輸入是之前的時間。結果表應該看起來像這樣:

| user | event | Line | 

| use1 | enter | 2 
| use1 | login | 3 
| use1 | enter | 6 
| use1 | login | 7 
| use1 | enter | 6 
| use1 | login | 8 
... 

任何幫助表示讚賞! 感謝

+0

前次的輸入事件'DAT '你的矩陣,你可以運行'sub.login < - dat [dat $ event ==「login」,]'。第二部分是我不明白的。 – R18

+0

@ R18我不只是希望將「登錄」與最近的「輸入」配對。例如,第一次登錄發生在第3行,這將在第2行之前得到最近的「輸入」......等等等等 – tee

+0

從您第一次詢問此幫助時沒有任何答案? http://stackoverflow.com/questions/43244308/rearranging-a-table-in-r – MrFlick

回答

1

分隔兩個事件分成不同的陣列中找到,如果你想只用`「登錄」`事件變量來選擇行,並讓通話每次登錄

i1 <- which(df1$event == "login") 
i2 <- which(df1$event == "enter") 
i3 <- unlist(lapply(i1, function(x) c(max(i2[i2 < x]), x))) 
df1[i3, ] 

    user event Line 
2 use1 enter 2 
3 use1 login 3 
6 use1 enter 6 
7 use1 login 7 
6.1 use1 enter 6 
8 use2 login 8 
+0

非常感謝你的工作! – tee