在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
函数,以前从未遇到过此函数,但很高兴知道。