将两个宽框架绑定到R中的面板中

时间:2015-12-02 16:42:04

标签: r panel reshape

我有两个数据框,每个数据框对应一个我想要绑定在一起的不同时间段。对于同一变量具有不同的变量名,但是对这些帧进行排序,使得第一帧中的第二列对应于第二帧中的第二列,等等。例如:

set.seed(123)
f1 <- data.frame(name = c("a", "b", "c"), t = c(1,1,1), x1 = sample(0:10,3), x2 =  sample(0:10,3))
f2 <- data.frame(name = c("a", "b", "c"),  t = c(2,2,2), y1 = sample(0:10,3), y2 =  sample(0:10,3))

我想在name变量上绑定它们,以便生成如下数据集:

  name t v1 v2
1    a 1  3  9
2    a 2  5  5
3    b 1  7 10
4    b 2  8  9
5    c 1 10  0
6    c 2  4  4

关于如何重塑框架而不必考虑像这样的变量名称的任何建议都会很棒。感谢。

2 个答案:

答案 0 :(得分:4)

data.table包有一个rbind方法,其use.names参数可以设置为FALSE,以便忽略不同的列名。

library(data.table) # V 1.9.6+
rbind(setDT(f1), setDT(f2), use.names = FALSE)[order(name)]
#    name t x1 x2
# 1:    a 1  3  9
# 2:    a 2  5  5
# 3:    b 1  7 10
# 4:    b 2  8  9
# 5:    c 1 10  0
# 6:    c 2  4  4

答案 1 :(得分:2)

colnames(f1) <- colnames(f2)
x <- rbind(f2, f1)     
x <- x[order(x$name, x$t),]
> x
name t y1 y2
4    a 1  3  9
1    a 2  5  5
5    b 1  7 10
2    b 2  8  9
6    c 1 10  0
3    c 2  4  4