2016-11-04 1 views
-1

Ich muß gruppierten Daten mit verschiedenen Spalten in einer Zeile darstellen. zB:repräsentierenden Daten in einer einzelnen Zeile pro Gruppe in R

Dataset

ID Action_Number 
1 A    
1 B 
1 C 
2 D 
2 E 

Ausgang erforderlich ist: -

1 A B C 
2 D E 

ich verschiedene Gruppe von Techniken ausprobiert haben und umsetzen, aber nicht in der Lage genaue Ausgabe zu erhalten. Bitte helfen Sie.

+1

Unter Umständen müssen Sie '' split' split (df1 $ Action_Number, df1 $ ID) 'oder wenn wir brauchen eine data.frame' Bibliothek (data.table); dcast (setDT (DF1), ID ~ rowid (ID), value.var = 'Action_Number') ' – akrun

+0

Hi..Thanks für die Hilfe. Diese Methode hat funktioniert :) – Ankit

Antwort

1

wäre die einfachste Option 'ID' zu split die 'Action_Number' sein in ein list von vector s Ausgabe

split(df1$Action_Number, df1$ID) 

Wenn wir jedoch eine data.frame/data.table benötigen, dann können dcast

library(data.table)#1.9.7+ 
dcast(setDT(df1), ID~rowid(ID), value.var = 'Action_Number') 
verwendet werden

Beachten Sie, dass rowid in der Entwick-Version von data.table zur Verfügung steht. Wenn wir also eine Version von data.table haben, die < 1.9.7 ist, dann eine Sequenz Variable erstellen und führen Sie dann die dcast

dcast(setDT(df1)[, rn := 1:.N, by = ID], ID ~ rn, value.var = 'Action_Number') 
+0

Hallo, vielen Dank. Es hat geklappt. Ich habe es vorher mit dcast versucht, war aber irgendwie nicht in der Lage, eine exakte Ausgabe zu bekommen. Ihre Methode hat perfekt funktioniert. :) – Ankit

+1

@Ankit Vielen Dank für den Kommentar. Sie können auch [hier] (http://stackoverflow.com/help/someone-answers) überprüfen – akrun

0

Wenn Sie diese auch als Liste statt halten möchten, können Sie tun:

df = data.frame(ID=c(1, 1, 1, 2, 2), Action_Number = c('A', 'B', 'C', 'D', 'E'), stringsAsFactors = F) 

unique_IDs <- unique(df$ID) 
l = list() 
for(i in 1:length(unique_IDs)){ 
    l[[i]] <- df[df$ID == i,"Action_Number"] 
} 

die hier l gibt Ihnen:

[[1]] 
[1] "A" "B" "C" 

[[2]] 
[1] "D" "E" 
0

Mit tidyverse (dplyr und 0.123.)

tab <- readr::read_delim("ID Action_Number 
1 A 
1 B 
1 C 
2 D 
2 E", delim = " ") 

tab %>% 
    dplyr::group_by(ID) %>% 
    dplyr::mutate(rn = paste0("V", 1:n())) %>% 
    tidyr::spread(rn, Action_Number) 
#> Source: local data frame [2 x 4] 
#> Groups: ID [2] 
#> 
#>  ID V1 V2 V3 
#> * <int> <chr> <chr> <chr> 
#> 1  1  A  B  C 
#> 2  2  D  E <NA> 
Verwandte Themen