如何将数据帧,标题值重新整形为R中的列值

时间:2014-12-05 21:31:48

标签: r dataframe reshape

我有一个类似于以下结构的数据集

date        Obj A       Obj B       Obj C
12/12/2001      2       3            4
11/12/2001      5       7            6

我希望将它们重塑为以下结构,用于ggplot2中的面板图

date        value       factor
12/12/2001      2       Obj A
11/12/2001      5       Obj A
12/12/2001      3       Obj B
11/12/2001      7       Obj B
12/12/2001      4       Obj C
11/12/2001      6       Obj C

除了对数据进行子集化然后逐个rbind数据之外,还有更简单的方法/包吗? 谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

正如MrFlick所说,这是R中的常见操作。但是,如果您不熟悉R,可能有点难以弄清楚如何执行此操作。在这里,我想给您一个使用tidyr包的示例。请注意,您不希望列名称中包含空格。

library(dplyr)
library(tidyr)

# Create your data
mydf <- as_data_frame(list(date = c("12/12/2001", "11/12/2001"),
                           ObjA = c(2, 5),
                           ObjB = c(3, 7),
                           ObjC = c(4, 6)))

# Transform your data. You have your data, names for key and value columns.
# As you see column names except date are in factor, and numbers are in value.

gather(mydf, factor, value, -date)

#        date factor value
#1 12/12/2001   ObjA     2
#2 11/12/2001   ObjA     5
#3 12/12/2001   ObjB     3
#4 11/12/2001   ObjB     7
#5 12/12/2001   ObjC     4
#6 11/12/2001   ObjC     6

答案 1 :(得分:2)

在基数R中,如果要重新整形的值不是factor s,您也可以使用stack

cbind(mydf[1], stack(mydf[-1]))
#         date values  ind
# 1 12/12/2001      2 ObjA
# 2 11/12/2001      5 ObjA
# 3 12/12/2001      3 ObjB
# 4 11/12/2001      7 ObjB
# 5 12/12/2001      4 ObjC
# 6 11/12/2001      6 ObjC