R堆替代方案

时间:2012-08-20 21:09:15

标签: r stack

我正在尝试编写代码,该代码从每个文件的一列中获取值,并根据第一列中的值打印出不同列的值列表。如果这是有道理的。我已经读过这些文件,但是我在管理表时遇到了问题。我想将表限制为这两列,因为文件非常大,繁琐且不必要。在我这样做的过程中,我有了这句话:

tmp<-stack(lapply(inputFiles,function(x) x[,3]))

但理想情况下,我想要包含两列(3和1),而不仅仅是一列,这样我就可以使用一行,例如这些:

search<-tmp[tmp$values < 100, "Target"]
write(search, file = "Five", ncolumns = 2)

但我不确定如何。我几乎可以肯定堆栈不适用于多个列。我尝试了一些不同的东西,类似于:

tmp<-stack(lapply(inputFiles,function(x) x[,3], x[,1]))

但当然没有用。

但我不知道在哪里看。有没有人有什么建议?

1 个答案:

答案 0 :(得分:1)

taRifx包有一个stack的列表方法,可以做你想要的。它堆叠了data.frames列表。

未经测试的代码:

library(taRifx)
tmp<-stack(lapply(inputFiles,function(x) x[,c(1,3)]))

但你没有改变任何东西!为什么这样做?

lapply()返回一个列表。在您的情况下,它返回一个列表,其中每个元素都是data.frame。

Base R没有用于堆叠列表的特殊方法。因此,当您在data.frames列表上调用stack()时,会调用stack.default,但这不起作用。

加载taRifx库会加载stack方法,专门处理data.frames列表。所以一切正常,因为stack()现在知道如何正确处理data.frames列表。

经过测试的示例:

dat <- replicate(10, data.frame(x=runif(2),y=rnorm(2)), simplify=FALSE)
str(dat)
stack(dat)

            x           y
1  0.42692948  0.32023455
2  0.75388820  0.24154125
3  0.64035957  1.96580059
4  0.47690790 -1.89772855
5  0.41668993  0.78083412
6  0.12643784  0.38029833
7  0.01656855  0.51225268
8  0.40653094  1.09408159
9  0.94236491 -0.13410923
10 0.05578115  1.12475364
11 0.75651062 -0.65441493
12 0.48210444  1.67325343
13 0.95348755  0.04828449
14 0.02315498 -0.28481193
15 0.27370762  0.43927826
16 0.83045889  0.75880763
17 0.40049367  0.06945058
18 0.86212662  1.49918712
19 0.97611629  0.13959291
20 0.29107186  0.64483646