有没有办法通过命名列表绑定多个数据框?
Is there a way to bind multiple dataframes by a named list?
如果之前有人问过这个问题,请原谅我,但我无法输入正确的搜索词来查找其他遇到此问题的人。
使用循环,我创建了一个数据帧名称列表。我想要做的是使用该列表的引用,以便 rbind 将相应的数据帧附加在一起。下面是我正在尝试做的一个例子:
list <- list("df1","df2","df3") #represents the list of names of the dataframes
all_df <- rbind(list)
以上只是将数据帧的名称附加在一起,而不是数据帧本身。我也试过:
all_df <- rbindlist(list)
和
all_df <- do.call(what = rbind, args = list)
但运气不好。我能找到的所有建议似乎都指的是数据帧列表,而不是数据帧名称列表。
请帮忙!我对此非常紧张,因为我知道解决方案可能非常简单!
示例:
library(rlist)
textdfs <- list('mtcars', 'mtcars', 'mtcars')
mylist <- lapply(textdfs, function(x) eval(parse(text=x)))
bigdf <- list.rbind(mylist)
如果我没理解错的话,你有一个字符向量,其中包含你要绑定的对象的名称。
您的目标是使用“名称向量”将多个数据帧绑定到一个数据帧中。
我可以建议使用 mget()
函数将您的字符向量转换为实际对象的名称吗?这个不用列了。
请看下面的代码:
# dummy data to test it
df1 <- head(mtcars, 2)
df2 <- head(mtcars, 3)
df3 <- head(mtcars, 4)
# your "vector of names"
lst.names <- list("df1","df2","df3") # the output of your loop
df.names <- do.call(rbind, lst.names)[, 1] # change the list to a character vector
# this seems to work
do.call(rbind, mget(df.names))
输出:
> do.call(rbind, mget(df.names))
mpg cyl disp hp drat wt qsec vs am gear carb
df1.Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
df1.Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
df2.Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
df2.Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
df2.Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
df3.Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
df3.Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
df3.Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
df3.Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
如果之前有人问过这个问题,请原谅我,但我无法输入正确的搜索词来查找其他遇到此问题的人。
使用循环,我创建了一个数据帧名称列表。我想要做的是使用该列表的引用,以便 rbind 将相应的数据帧附加在一起。下面是我正在尝试做的一个例子:
list <- list("df1","df2","df3") #represents the list of names of the dataframes
all_df <- rbind(list)
以上只是将数据帧的名称附加在一起,而不是数据帧本身。我也试过:
all_df <- rbindlist(list)
和
all_df <- do.call(what = rbind, args = list)
但运气不好。我能找到的所有建议似乎都指的是数据帧列表,而不是数据帧名称列表。
请帮忙!我对此非常紧张,因为我知道解决方案可能非常简单!
示例:
library(rlist)
textdfs <- list('mtcars', 'mtcars', 'mtcars')
mylist <- lapply(textdfs, function(x) eval(parse(text=x)))
bigdf <- list.rbind(mylist)
如果我没理解错的话,你有一个字符向量,其中包含你要绑定的对象的名称。 您的目标是使用“名称向量”将多个数据帧绑定到一个数据帧中。
我可以建议使用 mget()
函数将您的字符向量转换为实际对象的名称吗?这个不用列了。
请看下面的代码:
# dummy data to test it
df1 <- head(mtcars, 2)
df2 <- head(mtcars, 3)
df3 <- head(mtcars, 4)
# your "vector of names"
lst.names <- list("df1","df2","df3") # the output of your loop
df.names <- do.call(rbind, lst.names)[, 1] # change the list to a character vector
# this seems to work
do.call(rbind, mget(df.names))
输出:
> do.call(rbind, mget(df.names))
mpg cyl disp hp drat wt qsec vs am gear carb
df1.Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
df1.Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
df2.Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
df2.Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
df2.Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
df3.Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
df3.Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
df3.Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
df3.Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1