如何使用 while 循环绑定多个数据帧?
How to rbind multiple dataframes with a while-loop?
我正在尝试绑定多个加载的数据集(它们都具有相同的列数,分别命名为“num”、“source”和“target”)。以防万一,我有十个数据框,名称分别是“test1”、“test2”、“test3”等等...
我认为尝试下面的解决方案(创建一个空数据框并遍历其他数据框)可以解决我的问题,但我想我在 rbind 函数的第二个参数中遗漏了一些东西。我不知道使用 paste0("test", I) 来增加变量(更改数据框的名称)的解决方案是否正确...恐怕我只是想用 rbind 数据框字符串对象(并出现错误),对吗?
test = as.data.frame(matrix(ncol = 3, nrow = 0)) %>%
setNames(c("num", "source", "target"))
i=1
while (i < 11) {
test = rbind(test, paste0("test", i))
i = i + 1
}
我们需要 replicate
到 return 作为 list
out <- setNames(replicate(10, test, simplify = FALSE),
paste0("test", seq_len(10)))
如果已经在全局环境中创建了多个数据集,请将它们放入 list
和 rbind
中 do.call
out <- do.call(rbind, mget(paste0("test", 1:10)))
如果我理解正确的话,这可能会对你有所帮助
图书馆
library(dplyr)
示例数据
list_of_df <-
list(
df1 = data.frame(a = "1"),
df2 = data.frame(a = "2"),
df3 = data.frame(a = "1"),
df4 = data.frame(a = "2")
)
代码
bind_rows(list_of_df,.id = "dataset")
结果
dataset a
1 df1 1
2 df2 2
3 df3 1
4 df4 2
我们可以使用名称中的通用模式绑定 test1:test10:
library(dplyr)
result <- mget(ls(pattern="^test\d+")) %>%
bind_rows()
我正在尝试绑定多个加载的数据集(它们都具有相同的列数,分别命名为“num”、“source”和“target”)。以防万一,我有十个数据框,名称分别是“test1”、“test2”、“test3”等等...
我认为尝试下面的解决方案(创建一个空数据框并遍历其他数据框)可以解决我的问题,但我想我在 rbind 函数的第二个参数中遗漏了一些东西。我不知道使用 paste0("test", I) 来增加变量(更改数据框的名称)的解决方案是否正确...恐怕我只是想用 rbind 数据框字符串对象(并出现错误),对吗?
test = as.data.frame(matrix(ncol = 3, nrow = 0)) %>%
setNames(c("num", "source", "target"))
i=1
while (i < 11) {
test = rbind(test, paste0("test", i))
i = i + 1
}
我们需要 replicate
到 return 作为 list
out <- setNames(replicate(10, test, simplify = FALSE),
paste0("test", seq_len(10)))
如果已经在全局环境中创建了多个数据集,请将它们放入 list
和 rbind
中 do.call
out <- do.call(rbind, mget(paste0("test", 1:10)))
如果我理解正确的话,这可能会对你有所帮助
图书馆
library(dplyr)
示例数据
list_of_df <-
list(
df1 = data.frame(a = "1"),
df2 = data.frame(a = "2"),
df3 = data.frame(a = "1"),
df4 = data.frame(a = "2")
)
代码
bind_rows(list_of_df,.id = "dataset")
结果
dataset a
1 df1 1
2 df2 2
3 df3 1
4 df4 2
我们可以使用名称中的通用模式绑定 test1:test10:
library(dplyr)
result <- mget(ls(pattern="^test\d+")) %>%
bind_rows()