2017-01-23 7 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

を使用するなどvalue.varを指定しますわざと? – sgp667

+0

パターンが表示されません – sgp667

答えて

4

dcastからdata.tableを使用できます。 'data.frame'を 'data.table'(setDT(df1))に変換し、次にdcastシーケンスID(rowid - data.tableから 'Name'変数のために行います)を作成して、データセットを 'ワイド'フォーマットに変換し、式では、事故によって、または最初の値astheお好き `Log3`をしたSergという名前の行のために、 "イベント"

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 

またはあなたのdesider出力で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> 
+0

Serg Log3の名前がLog1の時間よりも短いため、Log3は最初の列になければならないため、出力が正しくありません。 – Smasell

+0

@Smasell出力が修正されました。申し訳ありませんが、前に注文を確認していません – akrun

関連する問題