将行条目转换为R中的列

时间:2014-07-10 06:48:18

标签: r dataframe reshape

我将数据放在数据框中,格式如下:

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

我想转换为以下格式:

ID   A    B    C
1    23   43   45
2    43   87   76
3    12   45   24
4    65   76   75

我怎样才能完成这项工作?

这种转变有名称吗?

1 个答案:

答案 0 :(得分:5)

这是一个很常见的长期"到"宽"转型被称为"重塑"你的数据。

以下是一些选项:

在基地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

您还可以使用" reshape2"中的dcast。包(还有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

如果您喜欢将命令链接在一起(或者说它还没有成长),您可以查看" tidyr"包装与" dplyr"包,你可以做:

# 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