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