在R中聚合多个数据集
我在R中有几个数据帧对象在R中聚合多个数据集,r,R,我在R中有几个数据帧对象 dataset1 dataset2 dataset3 ... 我试图使用循环使用rbind命令对它们进行行绑定,但是我很难将循环索引循环到数据集索引的字符串中 x=dataset1 for (i in 2:n-1){ assign(x,rbind(x,paste("dataset",i))) } 或者,以下方法是否更有效: x=rbind(x,paste("dataset",i)) 我遗漏了什么?您只是想rbind几个数据帧?尝试以下方法: df1 <-
dataset1
dataset2
dataset3
...
我试图使用循环使用rbind命令对它们进行行绑定,但是我很难将循环索引循环到数据集索引的字符串中
x=dataset1
for (i in 2:n-1){
assign(x,rbind(x,paste("dataset",i)))
}
或者,以下方法是否更有效:
x=rbind(x,paste("dataset",i))
我遗漏了什么?您只是想
rbind
几个数据帧?尝试以下方法:
df1 <- df2 <- df3 <- mtcars
df <- do.call(rbind, list(df1, df2, df3))
这两种方法都不起作用:
paste
只是创建一个字符串,可以是rbind
ing或assign
ing
我想你要找的是eval(parse(text=…)
。因此,类似这样的方法会起作用:
datasets <- sapply(1:n, function(i) paste0("dataset", i))
expr <- paste0("rbind(", paste(datasets, collapse=", "), ")")
x <- eval(parse(text=expr))
那么现在,如果您尝试rbind
将其绑定到某个数据集,会发生什么?让我们尝试使用虚拟数据集:
dataset1 <- head(mtcars)
dataset1
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
i <- 2
x <- rbind(dataset1, paste("dataset", i)
x
## mpg cyl disp hp drat wt qsec ## vs am gear carb
## Mazda RX4 21 6 160 110 3.9 2.62 16.46 ## 0 1 4 4
## Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 ## 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.32 18.61 ## 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 ## 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.44 17.02 ## 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.46 20.22 ## 1 0 3 1
## 7 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 ## dataset 2 dataset 2 dataset 2 dataset 2
那么现在您的第一个代码块出了什么问题:
x=dataset1
for (i in 2:n-1){
assign(x,rbind(x,paste("dataset",i)))
}
首先,您将收到此错误:
Error in assign(x, rbind(x, paste("dataset", i))) :
invalid first argument
assign
实际上接受一个字符串,而不是一个变量,并为其赋值:
assign("y", 5)
y
## [1] 5
这就是为什么你会看到这个错误。那么,如果将其改为“x”
,会发生什么情况呢
x=dataset1
for (i in 2:n-1){
assign("x",rbind(x,paste("dataset",i)))
}
在assign命令的第二个参数中,您已经看到了上面的内容。它将向现有的x
中添加一行包含“数据集i”<代码>分配将其分配回x
。因此,最终结果是:
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4
Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.44 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.46 20.22 1 0 3 1
7 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2
8 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1
9 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2
10 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3
11 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4
12 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5
13 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6
14 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7
15 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8
16 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9
17 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10
18 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11
19 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12
20 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13
21 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14
22 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15
23 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16
24 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17
25 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18
26 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19
如果您可以将中的数据集作为列表读取,那么它们将更易于使用,并且您不会遇到此问题<代码>库(财富);《财富》(“parse()”)谢谢Scotty的夸奖!!虽然我仍然不明白为什么我之前写的代码不起作用。我已经更新了我的答案,并讨论了如果你运行代码会发生什么。希望这能让事情变得更清楚!在第二个代码块中获得
tmp
后,仍然需要rbind
数据集列表。这显然是为了演示get
。我已经用第一个blockTrue回答了这个问题,但是如何将它们结合起来可能并不明显。回答用户的原始问题:x
assign("y", 5)
y
## [1] 5
x=dataset1
for (i in 2:n-1){
assign("x",rbind(x,paste("dataset",i)))
}
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4
Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.44 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.46 20.22 1 0 3 1
7 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2
8 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1 dataset 1
9 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2 dataset 2
10 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3 dataset 3
11 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4 dataset 4
12 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5 dataset 5
13 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6 dataset 6
14 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7 dataset 7
15 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8 dataset 8
16 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9 dataset 9
17 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10 dataset 10
18 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11 dataset 11
19 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12 dataset 12
20 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13 dataset 13
21 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14 dataset 14
22 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15 dataset 15
23 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16 dataset 16
24 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17 dataset 17
25 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18 dataset 18
26 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19 dataset 19