2016-10-06 3 views
0

Ich versuche mein Datenformat zu verdecken, um es in einer anderen Software verwenden zu können. In meinem Fall muss ich die Ebenen von resp in separate Variablen umwandeln, während ich die Liste der Hinweise für jede respID behalte. Meine Daten sind alsmachen Ebenen einer Variablen in separate Variablen

df<-structure(list(resp_ID = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L), clues = structure(c(5L, 1L, 4L, 3L, 2L, 5L, 6L, 1L), .Label = c("clear", "elephants", 
    "green", "insects", "muddy", "salty"), class = "factor")), .Names = c("resp_ID", 
    "clues"), class = "data.frame", row.names = c(NA, -8L)) 
    df 
     resp_ID  clues 
    1  1  muddy 
    2  1  clear 
    3  1 insects 
    4  2  green 
    5  2 elephants 
    6  2  muddy 
    7  3  salty 
    8  3  clear 

#I want the resulting data to be like 

output<-structure(list(X1 = structure(c(3L, 1L, 2L), .Label = c("clear", 
"insects", "muddy"), class = "factor"), X2 = structure(c(2L, 
1L, 3L), .Label = c("elephants", "green", "muddy"), class = "factor"), 
    X3 = structure(c(3L, 2L, 1L), .Label = c("", "clear", "salty" 
    ), class = "factor")), .Names = c("X1", "X2", "X3"), class = "data.frame", row.names = c(NA, 
-3L)) 

output 

    X1  X2 X3 
1 muddy  green salty 
2 clear elephants clear 
3 insects  muddy  
> 

folgt Ich versuchte (!!table(cbind(df[1],stack(df[1])[2]))) zu verwenden, aber ich denke, ich bin immer die Reihenfolge falsch irgendwo und auch versucht, die libary(caret) ohne Erfolg verwenden.

Antwort

2

Eine Idee bind_cols von dplyr zu verwenden, ist wie folgt,

library(dplyr) 
l1 <- split(df$clues, df$resp_ID) 
bind_cols(lapply(l1, `length<-`, max(length(l1)))) 

# A tibble: 3 × 3 
#  `1`  `2` `3` 
# <chr>  <chr> <chr> 
#1 muddy  green salty 
#2 clear elephants clear 
#3 insects  muddy <NA> 

HINWEIS

die Länge Einstellung von compliments of lukeA

+0

groß gleich zu sein, es über Temp gearbeitet <- split (df $ cluest, df $ resp_ID) n <- max (Längen (Temp)) new.df <-apply (temp, 'length <-', n) – Taw

Verwandte Themen