0

多くのファイルのそれぞれの1つの列から値を取得し、最初に見つかった値に応じて異なる列の値のリストを出力するコードを作成しようとしています。それが理にかなっている場合。ファイルを読み込みましたが、テーブルの管理に問題があります。ファイルは非常に大きく、面倒で不要なので、テーブルをこれら2つの列だけに制限したいと思います。そうしようとして、私はこの行を持っていました:

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

ただし、理想的には、次のような行を使用できるように、1つだけでなく2つの列(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パッケージには、stack必要な処理を実行するためのlistメソッドがあります。data.framesのリストをスタックします。

テストされていないコード:

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

しかし、あなたは何も変更しませんでした!なぜこれが機能するのですか?

lapply()リストを返します。あなたの場合、それは各要素がdata.frameであるリストを返します。

ベースRには、リストをスタックするための特別な方法はありません。したがってstack()、data.framesのリストを呼び出すと、が呼び出されますがstack.default、これは機能しません。

taRifxライブラリをロードすると、stackdata.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 に答える