这似乎是一个简单的问题,也许是,但是我无法找到简单的解决方案(它也可以是重复的,但是我什么也找不到)。
假设我有一个字符串数组:
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;
}
答案 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"