2017-07-04 4 views
1

Je souhaite exécuter spread sur une trame de données imbriquée, mais je ne parviens pas à la résoudre. Voici une trame de données de jouet pour l'utilisation spread sur une trame de données normale:Effectuer un étalement sur une trame de données imbriquée

df <- data.frame(A = 1:4, B = 5:8) 
df %>% spread(A,B) 

    1 2 3 4 
1 5 6 7 8 

Voici un exemple de jouet pour une trame de données imbriquées et ce que j'ai essayé (mais ne fonctionne pas):

df <- data.frame(dummy=c(1,1,2,2), A = 1:4, B = 5:8) 
df %>% 
    nest(-dummy) %>% 
    mutate(data = map(data, ~spread(.x$A,.x$B))) 

Error in mutate_impl(.data, dots) : 
    Evaluation error: Invalid column specification. 

Merci pour toute aide!

+2

Le premier argument de 'spread' est une trame de données, pas une colonne. Alors peut-être 'map (data, ~ spread (.x, A, B))'? – lukeA

+1

'spread' utilise une évaluation non-standard, donc vous ne pouvez pas utiliser le sous-ensemble' $ '; vous devez fournir un paramètre '.data', soit avec la suggestion de lukeA ci-dessus, soit implicitement sans le' '' ':' df%>% nid (-dummy)%>% mute (data = map (data, spread, A, B)) ' – alistaire

Répondre

0
df <- data.frame(dummy=c(1,1,2,2), A = 1:4, B = 5:8) 
df %>% 
    nest(-dummy) %>% 
    mutate(data = map(data, ~spread(.x, key = A, value = B))) 
+0

Merci à vous et« lukeA », qui a fourni la réponse d'abord dans les commentaires. (J'aimerais pouvoir vous donner plus de points @lukeA). J'ai essayé 'muter (data = map (données, ~ spread (.x, .x $ A, .x $ B)))', ce qui n'a pas fonctionné. Toujours en train de déterminer les types d'arguments ... – CPak