我有大量的数据帧(大约50,000)。每个数据框都有两列,键和值,大约100-200行。我的问题与this和this基本相似。根据他们的想法,我构建了一个数据帧列表并使用Reduce函数
freq_martix<-Reduce(function(dtf1, dtf2) merge(dtf1, dtf2, by = "key", all = TRUE),
freq_list)
但我的代码已运行了好几天。我只是想知道是否有更高效,更快速的方法来合并大量的数据帧?
答案 0 :(得分:0)
这种方式非常快。 首先,我创建了500个表,每个表包含150个键值对。
library(data.table)
library(stringi)
for (i in 1:500) {
set.seed(i)
dfNam <- paste('df', i, sep = '_')
df <- data.frame( cbind(key = tolower(stri_rand_strings(150, 1, pattern = '[A-Za-z]')), value = sample(1:1000, 150, replace = TRUE)) )
assign(dfNam, df)
rm(df)
rm(dfNam)
}
然后我调换并追加它们:
tmp <- data.table()
for (i in ls(pattern = 'df_') ) {
df <- get(i)
dt <- data.table( transpose(df) )
colnames(dt) <- as.character(unlist(dt[1, ]))
dt <- dt[-1, ]
tmp <- rbindlist(list(tmp, dt), use.names = TRUE, fill = TRUE)
}
毕竟转换回来了:
merged_data <- transpose(tmp)
key <- colnames(tmp)
merged_data <- cbind(key, merged_data)
像魅力一样。