我想基于字符串对数据帧进行子集化。 我可以使用一个长度的字符串,但不能使用多个(未知)长度的字符串。有什么想法吗?
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)
}
答案 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