R:从CSV文件数据列表中提取数据帧

时间:2015-10-16 18:52:42

标签: r csv dataframe

所以我来自Matlab和Python(以及其他一些不太相关的)的背景。我正在学习R课程。

我遵循了这个SO answer,以便将我的所有作业文件读入一行代码中的列表。我的代码如下所示:

# Get a list of files
files = list.files(path = dataDir, pattern = '*.csv')

# Import the file data
setwd(dataDir)
data = lapply(files, read.csv)

这一切都很好。但是,我得到一个对象,我不知道如何访问。我之前提到过Matlab和Python,因为我试图以这些语言的所有方式访问数据。

这里有什么摘要输出:

summary(data)
       Length Class      Mode
  [1,] 4      data.frame list
  [2,] 4      data.frame list
  [3,] 4      data.frame list

实际上有352个不仅仅是3个,但没有人需要列出所有352个。这里是个别索引的summary输出:

summary(data[200])
     Length Class      Mode
[1,] 4      data.frame list

因此,如果我输入data[200],我会列出前2500行数据。但data[200, 100]返回的错误与data[200][,100]data[200][100,]一样。 data[200][100]会返回[[1]] NULL

虽然我还没有充分考虑到我需要为这项作业做些什么,但我确信它将涉及计算各种数据列中所有非NA值的均值/中位数/最大值等。使用像mean(data[which(is.na('Col1')==F), 'Col6'])这样的测验来进行测验并不难。

所以我想我可以使用我需要的一个更黑的版本,我只需要在我需要的时候加载我需要的1个文件,然后只提取我需要的数据帧部分,并循环遍历所有我需要处理的数据文件。但是,我宁愿知道如何从lapply行访问R创建的对象中的数据。我怀疑这将使更复杂的分析更容易编码。

由于

1 个答案:

答案 0 :(得分:3)

当您进行子集化时,单个方括号[始终返回与您要分组的对象相同的类的对象。因此,data[200]返回长度为1的list,其中包含一个数据帧,因为data是一个列表。双方括号[[为您提供列表中包含的实际对象(在本例中为数据框)。获得数据框后,可以选择前{100}行[100,],这就是以下工作原理:

data[[200]][100,]