将两个宽框架绑定到 R 中的面板中
Bind two wide frames into panel in R
我有两个数据帧,每个数据帧对应于我想绑定在一起的不同时间段。同一个变量有不同的变量名,但帧的顺序是第一帧的第二列对应第二帧的第二列,等等。例如:
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
任何关于如何重塑框架而不必考虑像这样的变量名的建议都会很棒。谢谢
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
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
我有两个数据帧,每个数据帧对应于我想绑定在一起的不同时间段。同一个变量有不同的变量名,但帧的顺序是第一帧的第二列对应第二帧的第二列,等等。例如:
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
任何关于如何重塑框架而不必考虑像这样的变量名的建议都会很棒。谢谢
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
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