2016-10-06 2 views
0

Я пытаюсь скрывать свой формат данных, чтобы иметь возможность использовать его в другом программном обеспечении. В моем случае мне нужно преобразовать уровни resp в отдельные переменные, сохранив список подсказок для каждого respID. Мои данные следующим образомсделать уровни переменной в отдельные переменные

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  
> 

Я пытался использовать (!!table(cbind(df[1],stack(df[1])[2]))), но я думаю, что я получаю заказ неправильно где-нибудь, а также попытался использовать libary(caret) без успеха.

ответ

2

Одна идея состоит в том, чтобы использовать bind_cols из dplyr следующим образом,

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> 

ПРИМЕЧАНИЕ

Установка длины равной по compliments of lukeA

+0

велика, она работала с помощью температуры <- сплит (df $ cluest, df $ resp_ID) n <- max (lengths (temp)) new.df <-lapply (temp, 'length <-', n) – Taw