将少数列转为行并保持另一列

时间:2014-04-11 03:58:59

标签: r dataframe

如何将部分列转换为行并维护其余列?

我有一个如下所示的示例表:

Name      Date      Math   Science    Computer
Zed      201401      89      90          93
Ben      201401      98      92          89
Dan      201401      83      96          92

期望的输出:

Name      Date      Subject      Grade
Zed      201401      Math          89
Zed      201401      Science       90
Zed      201401      Computer      93
Ben      201401      Math          98
Ben      201401      Science       92
Ben      201401      Computer      89
Dan      201401      Math          83
Dan      201401      Science       96
Dan      201401      Computer      92

我尝试使用t(dataFrame)但它会转置整个数据集。

有人可以帮忙吗?谢谢。

2 个答案:

答案 0 :(得分:1)

使用reshape2包中的melt功能

> library(reshape2)
> melt(df, id=c("Name", "Date"), variable.name="Subject", value.name="Grade")
  Name   Date  Subject Grade
1  Zed 201401     Math    89
2  Ben 201401     Math    98
3  Dan 201401     Math    83
4  Zed 201401  Science    90
5  Ben 201401  Science    92
6  Dan 201401  Science    96
7  Zed 201401 Computer    93
8  Ben 201401 Computer    89
9  Dan 201401 Computer    92

答案 1 :(得分:1)

在基地R中,尝试以下方法:

cbind(mydf[c(1, 2)], stack(mydf[-c(1, 2)]))
#   Name   Date values      ind
# 1  Zed 201401     89     Math
# 2  Ben 201401     98     Math
# 3  Dan 201401     83     Math
# 4  Zed 201401     90  Science
# 5  Ben 201401     92  Science
# 6  Dan 201401     96  Science
# 7  Zed 201401     93 Computer
# 8  Ben 201401     89 Computer
# 9  Dan 201401     92 Computer