如何在R中的一个列表中管理一组数据帧

时间:2013-10-13 01:51:21

标签: r list

我在R中工作的数据帧超过十个,名为a1,a2,...,a10。我正在寻找一种方法将它们管理到一个列表中,因为我可以做更多的事情,而不是逐个工作。我的十个数据框有20000行和10列。它们太大了。我不知道在R中是否可以进行此转换,但我想在列表中保留每个数据框的原始名称。例如,如果我有一个列表a,那么第一个元素的名字必须是a1,等等。感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

也许我不明白你的意思,但是错在哪里:

a <- list(a1, a2, ... a10)

答案 1 :(得分:1)

注意:请使用下面的@flodel解决方案,不要支持。这是次要的答案。

假设您的数据框具有相同的前缀myDataframes,那么:

list <- sapply(grep("^myDataframes", ls(), value = TRUE),
               function(n) eval(parse(text = n)), simplify = FALSE, USE.NAMES = TRUE)

我将逐步解释:

# Uses grep to extract the names of the dataframes that you want to put in a list
grep("^myDataframes", ls(), value = TRUE)

# The sapply function does 2 things:
# 1. Evaluates the character vector of names and puts the relevant dataframe into a list.
# 2. Names the dataframe in the list with the name of the dataframe

希望以上有所帮助。

答案 2 :(得分:1)

首先,将所有data.frames名称放入字符向量中。你可以这样做:

df.names <- c("a1", "a2", "a3", ..., "a10")

df.names <- paste0("a", 1:10)

或通过正则表达式找到它们,例如“ a后跟一个或多个数字”:

df.names <- ls(pattern = "a\\d+")

如果你有很多data.frames,第二个和第三个建议是唯一实用的建议。对于最后一个,名称将按字母顺序排序,即a10将在a2之前排序,因此如果您想以数字方式对它们进行排序,您可以这样做:

df.names <- df.names[order(as.integer(sub("a", "", df.names)))]

获得名称向量后,使用mget将所有这些对象放入命名列表中:

my.list <- mget(df.names)

答案 3 :(得分:0)

因为它们毕竟不是很多,所以您可以使用命名列表对数据框进行分组。

df.list <- list( a1 = a1, a2 = a2, a3= a3) # etc until 10