0

リストの最初の 2 つの data.frames は次のとおりです。

lizlist <- list(structure(c(309, 356, 378, 403, 391, 423, 151, 440, 483, 
493, 504, 384, 525, 523, 522, 523, 1801, 2078, 2535, 2650, 2765, 
3247, 3764, 3826, 4490, 4974, 5106, 5279, 5764, 6372, 6879, 6983, 
1792, 2070, 2528, 2644, 2755, 3241, 3758, 3819, 4481, 4966, 5097, 
5273, 5756, 6362, 6869, 6975, 1808, 2085, 2542, 2658, 2772, 3256, 
3770, 3836, 4500, 4981, 5116, 5288, 5776, 6384, 6891, 6995), .Dim = c(16L, 
4L)), structure(c(388, 409, 460, 471, 493, 514, 537, 590, 607, 
609, 630, 629, 641, 634, 1814, 2089, 2546, 2660, 2774, 3255, 
3833, 4497, 4981, 5115, 5775, 6386, 6896, 7001, 1807, 2080, 2538, 
2653, 2766, 3245, 3825, 4489, 4973, 5106, 5765, 6374, 6885, 6991, 
1821, 2096, 2555, 2668, 2781, 3268, 3844, 4507, 4988, 5125, 5784, 
6397, 6909, 7012), .Dim = c(14L, 4L)))

nrow==14 に基づいて data.frame を選択し、残りをドロップするだけです。したがって、この場合、結果は 2 番目の data.frame のみを含むリストになります。次のラップリー呼び出しが機能せず、data.frame の最初の行のみを返し、最初の (空の) data.frame をリストする理由がわかりません。

lapply(lizlist,function(x) x[which(nrow(x)==14),])

繰り返しますが、助けてくれてありがとう!

4

2 に答える 2

1

これを試してください(最初の試行が失敗した理由を特定するのに役立つエラーメッセージが表示された後)

> lizlist[ unlist( lapply(lizlist, function(x) nrow(x) ) ) == 14]
[[1]]
      [,1] [,2] [,3] [,4]
 [1,]  388 1814 1807 1821
 [2,]  409 2089 2080 2096
 [3,]  460 2546 2538 2555
 [4,]  471 2660 2653 2668
 [5,]  493 2774 2766 2781
 [6,]  514 3255 3245 3268
 [7,]  537 3833 3825 3844
 [8,]  590 4497 4489 4507
 [9,]  607 4981 4973 4988
[10,]  609 5115 5106 5125
[11,]  630 5775 5765 5784
[12,]  629 6386 6374 6397
[13,]  641 6896 6885 6909
[14,]  634 7001 6991 7012

の目的の要素へのアクセスに成功しましたlizlistが、最初の行が返されました。これは、その要素で which() 関数が TRUE を返し、それが数値の 1 に変換されたためです。

データフレームのインデックスのリクエストに答えるには、次を試してください。

> which( sapply(lizlist,function(x) nrow(x)==14) )
[1] 2
于 2013-09-04T19:22:09.200 に答える
1

あなたが欲しいのは

lizlist[sapply(lizlist, nrow)==14]

listこれにより、基準を満たすすべての data.framesが返されることに注意してください (これは一般的には良いことです)。リストにそのようなdata.frameが1つしか含まれないことがわかっている場合は、[[使用できます。which

于 2013-09-04T19:18:40.140 に答える