没有指定输入的cbind数据

时间:2014-08-05 20:54:41

标签: r dataframe cbind

我有一段代码,我想要解析我的数据。问题是我不会总是有八个数据文件来cbind。我想保留下面的代码并导入五个,如果我有五个。 原因是这个。我将永远有1到100个数据帧到cbind,我不想总是手动告诉R cbind一个或100.我想只有cbind(1:100)并且总是cbind需要什么cbind。

finaltable<- cbind(onea, twoa, threea, foura, fivea, sixa, sevena, eighta)

1 个答案:

答案 0 :(得分:2)

如果没有更多数据,这是一个人为的例子。首先,我将制作一些具有相同行数的示例文件:

filenames <- paste0(c('onea', 'twoa', 'threea', 'foura'), '.csv')
for (fn in filenames)
    write.csv(matrix(runif(5), nc = 1), file = fn, row.names = FALSE)

让我们首先动态地导出要处理的文件名列表。 (此代码假设前一行没有发生这些文件。)

(filenames <- list.files(pattern = '*.csv'))
##  [1] "foura.csv"  "onea.csv"   "threea.csv" "twoa.csv"  

这是&#34; hard&#34;部分,阅读文件:

(ret <- do.call(cbind, lapply(filenames,
                              function(fn) read.csv(fn, header = TRUE))))
##           V1        V1        V1        V1
##  1 0.9091705 0.4934781 0.7607488 0.4267438
##  2 0.9692987 0.4349523 0.6066990 0.9134305
##  3 0.6444404 0.8639983 0.1473830 0.9844336
##  4 0.7719652 0.1492200 0.7731319 0.9689941
##  5 0.9237107 0.6317367 0.2565866 0.1084299

为了概念验证,这里的内容相同但操作文件名向量的子集,表明向量的长度不是问题所在:

(ret <- do.call(cbind, lapply(filenames[1:2],
                              function(fn) read.csv(fn, header = TRUE))))
##           V1        V1
##  1 0.9091705 0.4934781
##  2 0.9692987 0.4349523
##  3 0.6444404 0.8639983
##  4 0.7719652 0.1492200
##  5 0.9237107 0.6317367

您可能需要/需要重新定义列的名称(例如,使用names(ret) <- filenames),但您始终可以通过编号索引(例如ret[,2])来引用列,而无需担心名称