2017-01-06 48 views
0

我想基於字符串來對數據框進行子集合。 我可以使用一個長度字符串進行此項工作,但不能使用多個(未知)長度的字符串。有任何想法嗎?提取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 

This Works。我得到所有與狗的行。

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

這是行不通的。我想要狗和螞蟻的行,但沒有得到。

解決方法:只使用%的%,而不是==(感謝docendo-discimus)

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

您需要使用'%in%'代替'==' –

回答

1

在你的函數,你必須在邏輯運算符==更改爲%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 
相關問題