2016-05-19 5 views
1

私はdata.frameを持っています.1つの列はリストです(post参照)。data.frame内のどの要素に要素が含まれているかチェックしたいと思います。 )現在、私はdata.frameのすべての行をループしています。data.frameのチェックリストには要素が含まれています

df=data.frame(a=1:3,b=I(list(1,3:7,1:3))) 
df 
for(i in 1:nrow(df)){ 
    print(3 %in% df$b[[i]]) 

} 

もっとエレガントな方法がありますか?

+1

をあなたが '適用(DF、1、関数%の非公開にIN(X)3%(X [2]))、おそらくまたループ'が、 'を使用することができエレガント。' – Gopala

+3

私は '' 'mapply('%in% '、3、df $ b)' ''や ''サプリー(df $ b、function(x)3%%x) 'などと同様のものを使うでしょう –

+2

確かによりエレガントです。私は前に "mapply"を使っていなかった。非常に素晴らしい。 – Gopala

答えて

-1

はい、これを試してみてください。

3 %in% unlist(df$b) 

結果:

> 3 %in% unlist(df$b) 
[1] TRUE 

非公開に(DFの$ b)は、ベクターにDFの$ bのすべての要素を連結します。あなたは複数の列がある場合

は:

> apply(df,2,function(x) 3 %in% unlist(x)) 
    a b 
TRUE TRUE 
+1

私は彼らが行(列 "b")の結果を探していたと思います。あなたの解決策は、列3に3が現れたかどうかだけを示します。 –

+0

はい、彼らは特に列 "b"の結果を探していました。私は、列がリストを含んでいるかどうかに関係なく、複数の列の2番目のソリューションが列のどこかを探していることに気付いています。彼は最初に列をサブセット化する必要があります。 – Anton

0

を個人的に私はこのような問題を解決するためにマップを使用して好きで、より多くの情報がhereを見つけることができます。与え

library(purrr) 
df %>% transpose() %>% map(2) %>% map((function(x) 3 %in% x)) 

[[1]] 
[1] FALSE 

[[2]] 
[1] TRUE 

[[3]] 
[1] TRUE 

を代替的に、論理アレイではなくリストを返すmap_lglもあります。

与える
df %>% transpose() %>% map(2) %>% map_lgl((function(x) 3 %in% x)) 

[1] FALSE TRUE TRUE 
関連する問題