将数据从列重新格式化为行

时间:2016-03-08 18:13:27

标签: r perl

我有一个如下所示的数据集:

ID  C1 C2
A   S1  1
A   S2  1
A   S3  2
A   S4  2
B   S1  2
B   S2  2
B   S3  2
B   S4  2
C   S1  2
C   S2  2
C   S3  1
C   S4  1

并希望重新格式化为:

ID S1 S2 S3 S4
A 1 1 2 2
B 2 2 2 2
C 2 2 1 1

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

R中,我们可以使用dcast

library(reshape2)
dcast(df1, ID~C1, value.var='C2')
#   ID S1 S2 S3 S4
# 1  A  1  1  2  2
# 2  B  2  2  2  2
# 3  C  2  2  1  1

或使用base R

with(df1, tapply(C2, list(ID, C1), FUN=I))

或者

xtabs(C2~ID+C1, df1)

答案 1 :(得分:1)

使用tidyr::spread()的另一种选择:

library(tidyr)
spread(df, C1, C2)
  ID S1 S2 S3 S4
1  A  1  1  2  2
2  B  2  2  2  2
3  C  2  2  1  1