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

问题描述 投票:0回答:3

这似乎是一个简单的问题,可能是它,但我无法找到一个简单的解决方案(它也可能是重复的,但我找不到任何东西)。

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

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

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

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));

是否有类似于哪个()或grep()可用于检索位置whitout必须使用这样的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;
}
r grep which
3个回答
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

3
投票

您可以使用which%in获得所需的输出

which(df$fruits%in%objects)

1
投票

正如@李哲源和@AntoniosK所述,你也可以在%in%声明中使用which(),然后使用rownames()

rownames(df[which(df$fruits %in% objects),])
[1] "1"  "5"  "12"
© www.soinside.com 2019 - 2024. All rights reserved.