R转置由变量组

时间:2016-09-25 17:25:31

标签: r transpose

我的数据集看起来像这样

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
通过转换两个变量,

应该在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 个答案:

答案 0 :(得分:2)

我们可以使用base R

中的xtabs(value~attribute + name, df1)
protected $dates = [
        'start_at ',
    ];

答案 1 :(得分:0)

如果你是R,我建议你阅读Hadley Wickham和Garret 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