0

我正在尝试编写代码,该代码从许多文件中的每一个的一列中获取值,并根据在第一列中找到的值打印出不同列的值列表。如果这是有道理的。我已阅读其中的文件,但在管理表格时遇到了麻烦。我想将表限制为仅这两列,因为文件非常大、繁琐且不必要。在我尝试这样做时,我有这条线:

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]))

但这当然没有用。

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

4

1 回答 1

1

taRifx 包有一个 list 方法可以满足stack你的需求。它堆叠 data.frames 列表。

未经测试的代码:

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

但是你什么都没改变!为什么这行得通?

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

Base R 没有用于堆叠列表的特殊方法。因此,当您调用stack()data.frames 列表时,它会调用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
于 2012-08-20T21:39:14.660 回答