2017-01-06 6 views
0

文字列に基づいてデータフレームをサブセット化したい。 私は1つの長さの文字列でこの作業を行うことができますが、複数の(未知の)長さの文字列ではできません。何か案は?長さの文字列が不明なデータを抽出するR

x <- data.frame(a=1:8, b=rep(c("ant", "bee", "beetle", "dog"),2)) 



fun <- function(sp){ 
    a <- x[x$b==sp,] 
    return(a) 
} 

sp <- "dog" 
fun(sp) 
    a b 
4 4 dog 
8 8 dog 

これは機能します。私は犬ですべての列を取得します。

sp <- c("dog", "ant") 
fun(sp) 
[1] a b 
<0 rows> (or 0-length row.names) 

これは機能しません。私は犬と蟻で行を望むが、何も得られない。

ソリューション:ちょうどあなたの関数で

fun <- function(sp){ 
a <- x[x$b%in%sp,] 
a) 
} 
+3

あなたは '=='の代わりに '%in%'を使う必要があります –

答えて

1

(おかげでdocendo-discimusをするために)の代わりに==を%で%を使用して、あなたは、ベクトルと比較するために%in%に論理演算子==を変更する必要があります。

fun <- function(sp){ 
    a <- x[x$b %in% sp,] 
    return(a) 
} 

sp <- "dog" 
fun(sp) 
# a b 
# 4 4 dog 
# 8 8 dog 
sp <- c("dog", "ant") 
fun(sp) 
# a b 
# 1 1 ant 
# 4 4 dog 
# 5 5 ant 
# 8 8 dog 
関連する問題