2016-09-25 27 views
0

我的数据集看起来像这样[R转置数据的变量组设置

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

,我希望得到一个数据集这样

 Tom Jack 
age  20 22 
height 80 90 
weight 100 110 

应转置是相当stragiht向前SAS两个变量 但它不是在R中,我该怎么做呢?我试图融化和调换,但未能....

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 ") 

回答

2

我们可以。如果你开始R中,使用xtabsbase R

xtabs(value~attribute + name, df1) 
0

,我建议你阅读哈德利韦翰与亭子间Grolemund的新书R for Data Science。其中,他们介绍了tidyverse这可能会使某些操作更容易。你当然可以使用xtabs - 这是一个非常棒的工具,特别是对于构建稀疏矩阵 - 但如果你是新手,它可能有点神秘。

例如,在您的数据集为data.frame的情况下,可以使用tidyr进行重新整形。请注意,我也使用readr::read_table,它避免了stringsToFactors问题。

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