2015-10-16 169 views
0

所以我来自Matlab和Python(和其他几个相关性较低的)的背景。我为Coursera课程选择R。R:从CSV文件数据列表中提取数据帧

我跟着这个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中的数据。我怀疑这会使代码更容易编写更复杂的分析。

感谢

+2

如果你'数据[200] [100]'会发生什么? –

+0

@CactusWoman这样做。谢谢。你能回答这个问题吗?我可以接受吗? –

+1

@gabe只是想说明,它看起来像数据是data.frames的列表。您可以直接访问列表中的项目:'data [[1]]',它将访问列表的第一项。然后你在@CactusWoman所说的附加括号'[100,]'中选择数据框。 – giraffehere

回答

3

当你集,单方括号[总是返回相同的类的对象为您进行子集的对象。因此,data[200]返回包含一个数据帧的长度为1的list,因为data是一个列表。双方括号[[为您提供列表中包含的实际对象(在本例中为数据框)。一旦你有一个数据帧,可以选择前100行与[100,],这就是为什么以下工作:

data[[200]][100,]