我正在尝试编写代码,该代码从每个文件的一列中获取值,并根据第一列中的值打印出不同列的值列表。如果这是有道理的。我已经读过这些文件,但是我在管理表时遇到了问题。我想将表限制为这两列,因为文件非常大,繁琐且不必要。在我这样做的过程中,我有了这句话:
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]))
但当然没有用。
但我不知道在哪里看。有没有人有什么建议?
答案 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