一个R函数,可沿一列查找多个对象

时间:2018-08-28 11:46:35

标签: r grep which

这似乎是一个简单的问题,也许是,但是我无法找到简单的解决方案(它也可以是重复的,但是我什么也找不到)。

假设我有一个字符串数组:

objects = c("apple","banana","cranberry");

,我想从 fruit 列中提取每个对象的位置,以获取数据框其他列中包含的值。

df = data.frame(fruits=c("banana","watermelon","orange","pineapple","apple","strawberry","pear","lemon","grapefruit","peach","apricot","cranberry"),asia=c(1,3,2,1,3,1,2,3,1,2,2,1),america=c(1,2,3,2,3,1,3,2,2,1,3,2));

是否存在类似于which()或grep()的东西,可用于检索必须使用如下for循环的位置:

position = matrix(nrow=length(objects),ncol=2);
i = 1;
for(obj in objects){
    position[i,] = unlist(df[which(df$fruit==obj),-1]);
    i = i + 1;
}

3 个答案:

答案 0 :(得分:3)

您可以使用which%in

获得所需的输出。
which(df$fruits%in%objects)

答案 1 :(得分:2)

我们可以使用match

df[match(objects, df$fruits), ]
#      fruits asia america
#5      apple    3       3
#1     banana    1       1
#12 cranberry    1       2

match(objects, df$fruits)返回位置

# [1]  5  1 12

答案 2 :(得分:1)

如@李哲源和@AntoniosK所述,您还可以在%in%语句中使用which(),然后使用rownames()

rownames(df[which(df$fruits %in% objects),])
[1] "1"  "5"  "12"