8

リストを作成し、各コンポーネントに 1 つのデータ フレームを格納しました。ここで、特定の列に NA を持つ行のみを保持して、これらのデータ フレームをフィルター処理したいと思います。この操作の結果を、その列に NA を持つ行のみを持つデータ フレームを含む別のリストにしたいと考えています。

ここに私が言っていることを明確にするためのコードがあります。と想定d1d2、私のデータフレームです

set.seed(1)

d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA))
d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007))  

print(d1)
 a    b
 1.3011543 2006
 0.3780023 2006
-0.3101449 2006
-1.3927445 2006
-1.0726218   NA

print(d2)
a    b
1 2007
2 2007
3   NA
4   NA
5 2007

forループでリストに配置します

ls<-list()

for (i in 1:2){ 

  str<-paste("d", i, sep="")
  dat<-get(str)
  ls[[str]]<-dat

}

ここで、NA を含む列 b の行のみを残すように、各リスト コンポーネントをフィルター処理したいと思います。これを行うために、最初から失敗することを知っていたので、次のコマンドを使用してみました。私の問題は、subset()使用するのに適切な関数であるかどうかがわからないことです。その場合、各データ フレーム (つまり、サブセット関数の最初の要素) を修飾する方法がわからないことです。

lsNA<-lapply(ls, subset(ls, is.na(b)))

私の厳しい制限を乗り越えるのを手伝ってくれませんか?

4

2 に答える 2

6

@Riccardo の最後のコメントの質問については、次を試してください。

lapply(my.ls, "[", 1)

または代わりに:

lapply(my.ls, "[[", 1)

出力をデータフレームのリストにするか、ベクトルのリストにするかによって異なります。

于 2016-01-06T19:22:37.607 に答える