функция R, которая находит несколько объектов вдоль столбца - PullRequest
0 голосов
/ 28 августа 2018

Кажется, это простой вопрос, и, возможно, это так, но я не могу найти легкое решение (оно также может быть дубликатом, но я ничего не могу найти).

Предположим, у меня есть строковый массив:

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

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Как указано @ 李哲源 и @AntoniosK, вы также можете использовать %in% в выражении which(), затем rownames():

rownames(df[which(df$fruits %in% objects),])
[1] "1"  "5"  "12"
0 голосов
/ 28 августа 2018

Вы можете получить желаемый результат, используя which и %in

which(df$fruits%in%objects)
0 голосов
/ 28 августа 2018

Мы можем использовать 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
...