我的数据集看起来像这样
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 ")
答案 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