在R中将行条目转换为列

在R中将行条目转换为列,r,dataframe,reshape,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

我的数据以以下格式保存在数据框中:

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
我想转换为以下格式:

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
我怎样才能做到这一点

这种转换有名字吗?

这是一种非常常见的从“长”到“宽”的转换,称为“重塑”数据

以下是一些选项:

在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
您还可以使用“重塑2”软件包中的
dcast
(还有
dcast.data.table
,它是对
dcast
的重写,但可以提高速度)

如果您喜欢将命令链接或管道连接在一起(老实说,我还没有意识到这一点),您可以将“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
这是一种非常常见的从“长”到“宽”的转换,称为“重塑”数据

以下是一些选项:

在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
您还可以使用“重塑2”软件包中的
dcast
(还有
dcast.data.table
,它是对
dcast
的重写,但可以提高速度)

如果您喜欢将命令链接或管道连接在一起(老实说,我还没有意识到这一点),您可以将“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

+1对于
xtabs
函数,以前从未遇到过此函数,但很高兴知道。+1对于
xtabs
函数,以前从未遇到过此函数,但很高兴知道。