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