在R

时间:2017-01-06 13:27:22

标签: r string function subset

我想基于字符串对数据帧进行子集化。 我可以使用一个长度的字符串,但不能使用多个(未知)长度的字符串。有什么想法吗?

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)

这不起作用。我想要带有狗和蚂蚁的行,但是没有。

解决方案:只使用%in%而不是==(感谢docendo-discimus)

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

1 个答案:

答案 0 :(得分: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