【发布时间】:2015-04-12 10:43:08
【问题描述】:
我很难弄清楚如何从存储在列表中的数据帧中对某些特定数据进行子集化。我已经阅读了该网站以及 UCLA 和 Adv-R 上的大量文章,但我没有取得任何进展。
Advanced-R for Subsetting UCLA Advanced R for Subsetting
我的函数读入有助于识别我有兴趣从一系列文件中提取哪些数据的参数。所以,dat1、dat2 和 dat3 在文件 1:15 中存储在一个文件目录 (1:999) 中。
使用 lapply 和 read.CSV 我已将所有文件 (1:15) 读入数据帧列表。
x <- lapply(directory[id], function(i) {
read.csv(i, header = TRUE)
} )
通过 str(x) [仅第一个元素] 的示例如下所示:
List of 15
$ :'data.frame': 1461 obs. of 4 variables:
..$ DateObv : Factor w/ 1461 levels "2003-01-01","2003-01-02",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ dat1: num [1:1461] NA NA NA NA NA NA NA NA NA NA ...
..$ dat2: num [1:1461] NA NA NA NA NA NA NA NA NA NA ...
..$ ID : int [1:1461] 1 1 1 1 1 1 1 1 1 1 ...
因此,在我的函数的参数中,我想告诉它从文件 1:15 中给我 dat1,然后我将对结果进行平均。
我想也许我可以使用另一个 lapply 将 dat1 子集专门放入一个向量中,但它一直返回一个 NULL 值,或“list()”,或者只是设置对象不能是子集的错误,或者子集缺少参数。我已经尝试过子集、括号表示法。
您如何建议我获取数据帧列表的一个子集,以便我将所有 dat1 或 dat2 恢复到一个可以计算平均值的向量中?
感谢您的时间和考虑。
【问题讨论】:
-
我猜你可以使用类似 lapply(x,
[[,'dat1') 的东西,它会返回一个与每个数据帧中的 'dat1' 列相对应的向量列表跨度> -
您尝试的代码到底是什么导致了错误?我认为
unlist(lapply(x, "[[", "dat1"))可能会起作用。一个实际的reproducible example 在这里比仅仅描述结构更有用。 -
你好@mrflick 这是一个观察样本 1. Date dat1 dat2 ID 10/11/2003 NA NA 1 10/12/2003 5.99 0.428 1 10/13/2003 NA NA 1 10/14/ 2003 NA NA 1 10/15/2003 NA NA 1 10/16/2003 NA NA 1 10/17/2003 NA NA 1 10/18/2003 4.68 1.04 1 10/19/2003 NA NA 1 10/20/2003 NA NA 1 10/21/2003 NA NA 1 10/22/2003 NA NA 1 10/23/2003 NA NA 1 10/24/2003 3.47 0.363 1 10/25/2003 NA NA 1 10/26/2003 NA NA 1 2003 年 10 月 27 日 NA NA 1 10/28/2003 NA NA 1 10/29/2003 NA NA 1 2003 年 10 月 30 日 2.42 0.507 1
-
@MrFlick 我试过你的方法,它只返回“NULL”,这让我相信我的 dat1 参数实际上并没有被使用。我知道如果我做一个简单的 print(dat1) 它会给我函数内的参数。 y
-
您在 cmets 上面发布的内容不是可重现的示例。尝试
dput()-ing 示例对象或在您的原始问题中构建示例列表。阅读我为其他示例提供的链接。与您所描述的情况肯定有所不同。