【发布时间】:2020-05-15 09:45:39
【问题描述】:
我有几个从 dbf 导入的宽格式数据帧。所以每一列都是一个日期,每一行都是一个观察。因此,根据我正在查看的地理形状的大小,我每天都有 500-2000 次观察。出于可重复性的目的,我创建了 2 个虚拟数据帧,其中包含我可能在实际数据帧中看到的一系列值。
Data1<- data.frame(replicate(10, sample(0:1000, 20, rep= TRUE)))
Data<- data.frame(replicate(10, sample(0:1000, 20, rep= TRUE)))
因为我有很多这样的数据框,所以我将它们放在一个列表中,这样我就可以同时在许多数据框上运行函数。
filenames<- mget(ls(pattern= 'Data'))
现在我的问题是我正在尝试编写一个函数来计算每列中值在 0-100 范围内的出现次数。我可以用
做到这一点library(plyr)
Datacount<- ldply(Data, function(x) length(which(x>=0 & x<=100)))
然后我需要能够匹配第一列实例(日期),其中该计数大于每列观察总数的 10%。因此,对于具有 20 个观察值的数据框,我想要第一个日期,其中 0-100 之间的单元格数大于 2。我之前使用 apply 完成了此操作(其中“V1”是包含计数的列名)
Datamatch<- apply (Datacount["V1"]>2,2,function(x) match (TRUE,x))
我的问题是,是否有一种方法可以将这些函数组合到一个进程中,我可以将其用于“文件名”的 for 循环或使用 lapply 系列函数之一?
这里的详细信息是我构建的用于在数据帧的每一行中运行的单个函数的示例。这给了我最后一个日期的列索引,其中每行值
icein list2env(lapply(filenames, icein), envir= .GlobalEnv)
【问题讨论】: