2017-01-23 81 views
3

我有我的數據幀:移調data.frame [R

Name Time Event 
Serg 15 Log1 
Nate 15 Log2 
Serg 10 Log3 
Nate 9 Log1 
Nate 20 Log5 

而且我想通過時間time這樣的移調它爲每一個Name

Name 1  2  3 
Serg Log3 Log1 NA 
Nate Log1 Log2 Log5 

希望我解釋清楚!謝謝

+0

,名爲SERG意外或做你挑'Log3' asthe第一排值故意? – sgp667

+0

沒關係我看到模式 – sgp667

回答

4

我們可以從data.table使用dcast。通過創建一個序列ID(rowid - from data.table做'Name'變量),將'data.frame'轉換爲'data.table'(setDT(df1)),然後將dcast數據集轉換爲'wide'格式,公式,並指定value.var爲 「事件」

library(data.table) 
dcast(setDT(df1)[order(Name, Time)], Name ~ rowid(Name), value.var = "Event") 
# Name 1 2 3 
#1: Nate Log1 Log2 Log5 
#2: Serg Log3 Log1 NA 

或者使用tidyverse

library(dplyr) 
library(tidyr) 
df1 %>% 
    group_by(Name) %>% 
    arrange(Name, Time) %>% 
    mutate(ind = row_number()) %>% 
    select(-Time) %>% 
    spread(ind, Event) 
# Name `1` `2` `3` 
#* <chr> <chr> <chr> <chr> 
#1 Nate Log1 Log2 Log5 
#2 Serg Log3 Log1 <NA> 
在desider輸出
+0

輸出不正確,因爲名稱Serg Log3必須位於第一列,因爲它的時間小於Log1。 – Smasell

+0

@Smasell輸出已更正。對不起,沒有檢查過訂單 – akrun