Nex*_*eer 0 r reshape dataframe
我将数据放在数据框中,格式如下:
ID GRP VAL
1 A 23
2 A 43
3 A 12
4 A 65
1 B 43
2 B 87
3 B 45
4 B 76
1 C 45
2 C 76
3 C 24
4 C 75
Run Code Online (Sandbox Code Playgroud)
我想转换为以下格式:
ID A B C
1 23 43 45
2 43 87 76
3 12 45 24
4 65 76 75
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
这种转变有名称吗?
这是一种非常常见的"长"到"宽"转换,称为"重塑"您的数据.
以下是一些选项:
在基地R:
> reshape(mydf, direction = "wide", idvar="ID", timevar="GRP")
ID VAL.A VAL.B VAL.C
1 1 23 43 45
2 2 43 87 76
3 3 12 45 24
4 4 65 76 75
> xtabs(VAL ~ ID + GRP, mydf)
GRP
ID A B C
1 23 43 45
2 43 87 76
3 12 45 24
4 65 76 75
Run Code Online (Sandbox Code Playgroud)
您也可以使用dcast"reshape2"软件包(dcast.data.table这也是重写dcast但可以提高速度).
> library(reshape2)
> dcast(mydf, ID ~ GRP, value.var="VAL")
ID A B C
1 1 23 43 45
2 2 43 87 76
3 3 12 45 24
4 4 65 76 75
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢将命令链接在一起(或者说它还没有在我身上发展),您可以结合"dplyr"包查看"tidyr"包,您可以使用它来执行:
# devtools::install_github("hadley/tidyr")
library(dplyr)
library(tidyr)
mydf %>%
group_by(ID) %>%
spread(GRP, VAL)
# Source: local data frame [4 x 4]
#
# ID A B C
# 1 1 23 43 45
# 2 2 43 87 76
# 3 3 12 45 24
# 4 4 65 76 75
Run Code Online (Sandbox Code Playgroud)