Функция 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));

Есть ли что-то похожее на 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 ответа

Решение

Мы можем использовать 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"
Другие вопросы по тегам