我的属性列表很大,我想将它们转换成表格。
我看起来像这样:
name Key Value
1 age 20
1 sex 1
2 age 20
2 sex 0
3 age 22
4 age 30
5 age 29
6 age 6
我想将其转换为如下形式:
name age sex
1 20 1
2 20 0
3 22
4 30
5 29
6 6
有人有主意吗?
编辑 我的原始列表具有更多的价值,而不仅仅是2。我看到的所有答案都无法回答我的问题。 我会尝试用较小的桌子更好地解释它。
我的桌子:
name key value
1 first 0
2 first 1
2 sec 1
1 sec 2
1 tr 1
2 tr 0
3 first 0
3 sec 0
4 first 0
想要的结果:
name first sec tr
1 0 2 1
2 1 1 0
3 0 0
4 0
答案 0 :(得分:0)
以下是使用来自OP的数据tidyr::spread()
的示例。
rawData <- "name,Key,Value
1,age,20
1,sex,1
2,age,20
2,sex,0
3,age,22
4,age,30
5,age,29
6,age,6"
df <- read.csv(text=rawData,header=TRUE,stringsAsFactors=FALSE)
library(tidyr)
df %>% spread(.,key=Key,value=Value)
...以及输出:
> df %>% spread(.,key=Key,value=Value)
name age sex
1 1 20 1
2 2 20 0
3 3 22 NA
4 4 30 NA
5 5 29 NA
6 6 6 NA
>
有关spread()
及其补语gather()
的其他背景,请参阅R for Data Science, Chapter 12: Tidy Data。