一个R函数,它沿列查找多个对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个R函数,它沿列查找多个对象相关的知识,希望对你有一定的参考价值。
这似乎是一个简单的问题,可能是它,但我无法找到一个简单的解决方案(它也可能是重复的,但我找不到任何东西)。
假设我有一个字符串数组:
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;
}
答案
我们可以使用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
另一答案
您可以使用which
和%in
获得所需的输出
which(df$fruits%in%objects)
另一答案
正如@李哲源和@AntoniosK所述,你也可以在%in%
声明中使用which()
,然后使用rownames()
:
rownames(df[which(df$fruits %in% objects),])
[1] "1" "5" "12"
以上是关于一个R函数,它沿列查找多个对象的主要内容,如果未能解决你的问题,请参考以下文章