2017-01-06 5 views
0

私は変数のいくつかがリストであるデータフレームを持っています。私はこれらのリストから特定の値を検索する方法を見つけることを試みています。データフレーム内のリストを検索する

以下は私が使用しているのと似ています。

df <- data_frame(
     abc = letters[1:5], 
     lst = list(1:3, 2:6, 7:10, 
        1, 1:5) 
     ) 

私は理想的には次のようなことができます。

df$result <- 1 %in% df$lst 

これは間違った結果を返しています。

私は行でそれをirow見れば、私は

1 %in% df$lst 
FALSE 
1 %in% df$lst[[1]] 
TRUE 

を参照してくださいだから、私は再帰的データフレームの各行のリストを検討する何らかの方法が必要だと思います。私はこれを行う最適な方法は何か分かりません。

わかりやすくするために、 これは既に50以上の変数を持つデータフレーム内の2つの変数です。私はこれらの変数を爆発的に避けることを好むだろうが、提案にはオープンである。

これらの各セルには常に1つのリストしかありません。

唯一の違いは、行が数値ではない文字値で構成されていることです。

ありがとうございました!

+1

uがデータフレームにリストを格納する理由。 – Bg1850

+0

どちらも確信していない...「これらの変数を爆発的に避けたい」というのはどういう意味ですか?確かにこれを達成する別の方法がありますが、Bg1850のソリューションが機能します。 –

+0

私は爆発的に、リストの要素を別々の列に分けることを意味します。 –

答えて

2

私はこれが仕事をするべきだと思っていますが、データフレームにリストを格納する正しい方法があると思います。

lapply(df$lst,function(x)(1 %in% x))

> df 
Source: local data frame [5 x 2] 

    abc  lst 
    <chr> <list> 
1  a <int [3]> 
2  b <int [5]> 
3  c <int [4]> 
4  d <dbl [1]> 
5  e <int [5]> 
> lapply(df$lst,function(x)(1 %in% x)) 
[[1]] 
[1] TRUE 

[[2]] 
[1] FALSE 

[[3]] 
[1] FALSE 

[[4]] 
[1] TRUE 

[[5]] 
[1] TRUE 

> 
+0

グッドsolution ...また、 'sapply()'を使うこともできます。その結果、リストではなくベクトルが結果として得られます。 –

+0

ありがとうBg1850!これは完璧です! 私はdfがうまく動作しないことに同意します。私はリストの要素を別々の変数に分解してみました。その有用性を制限する他の複雑さがあります。 しかし、別のオプションについて考えていましたか? –

+0

私はリストのプレーンなリストを使用していますので、参照する要素が簡単になり、データフレームもリストになります.2d構造に適合するデータセットのデータフレームを使用する必要があります。基本的には、列が変数を参照し、行がその変数の単一の参照を参照するデータフレームを使用します(キーワードは単一の観察です)。それ以外のものはすべて移動する方法です。 – Bg1850

関連する問題