2016-09-25 4 views
0

meine Daten sehen gesetzt wie dieseR transponieren durch Gruppe von Variablen

name attribute value 
Tom age  20 
Tom height  80 
Tom weight  100 
Jack age  22 
Jack height  90 
Jack weight  110 

Datensatz und ich möchte einen Datensatz wie diese

 Tom Jack 
age  20 22 
height 80 90 
weight 100 110 

sollte transponieren ziemlich stragiht vorwärts in SAS bekommen sein von zwei Variablen aber es ist nicht so in R, wie kann ich es tun? Ich habe versucht, Schmelze und transponieren, aber nicht ....

df1 <- read.table(header = TRUE, stringsAsFactors = FALSE, 
      text = "name attribute value 
Tom age  20 
      Tom height  80 
      Tom weight  100 
      Jack age  22 
      Jack height  90 
      Jack weight  110 ") 

Antwort

2

Wir xtabs von base R

xtabs(value~attribute + name, df1) 
0

verwenden können, wenn Sie R fängst, empfehle ich Ihnen Hadley Wickham und Garret Grolemund neues Buch lesen R for Data Science. Darin stellen sie die tidyverse vor, die bestimmte Operationen erleichtern kann. Sie können sicherlich xtabs verwenden - und es ist ein fantastisches Werkzeug, besonders für die Erstellung von dünn besetzten Matrizen - aber es kann ein wenig esoterisch sein, wenn Sie neu sind.

Zum Beispiel mit Ihrem Datensatz in data.frame, können Sie tidyr umformen. Beachten Sie, dass ich auch readr::read_table verwende, was das Problem stringsToFactors vermeidet.

library(tidyverse) 

df1 <- read_table(
"name attribute value 
Tom age  20 
Tom height  80 
Tom weight  100 
Jack age  22 
Jack height  90 
Jack weight  110 ") 

df1 %>% 
    spread(name, value) 

    attribute Jack Tom 
*  <chr> <int> <int> 
1  age 22 20 
2 height 90 80 
3 weight 110 100