我有一个类似于以下结构的数据集
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数据之外,还有更简单的方法/包吗? 谢谢你的帮助
答案 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