2014-09-05 3 views
2

У меня есть кадр данных, и я хочу извлечь строки, в которых конкретные столбцы имеют определенное значение. Имена столбцов хранятся в массиве символов, а значения хранятся в списке.Динамическая индексация кадра данных по имени столбца

data <- data.frame(A=c("a","b","b"), B=c(1,2,2), C=(3,3,4)) 
column_key <- c("A", "B") 
value_key <- list("b", 2) 

Очевидно, что я могу извлечь информацию, которую я хочу простой индексации, если я жёстко имена столбцов ключей:

desired_rows <- data[data$A=="b" & data$B==2,] 

desired_rows = 
    A B C 
2 b 2 3 
3 b 2 4 

Но как я делаю это, если имена столбцов хранятся в переменных , В идеале это было бы примерно так:

key <- value_key 
names(key) <- column_key 
desired_rows <- data[key,] 

Но я не могу индексировать data.frame со списком.

ответ

2

Я нашел этот трюк перед отправкой вопроса.

Я могу сравнить фрейм данных со списком с той же длиной, что и строка, которая возвращает логическую матрицу, указывающую, какой элемент в каждой строке соответствует соответствующему элементу в списке. Поскольку я хочу найти строки, которые полностью совпадают, функция all по строкам, чтобы получить логический индекс в строках data.

desired_rows <- data[apply(data[column_key]==value_key, 1, all),] 
+0

Подождите, так что вы ответили на свой вопрос, прежде чем задавать его? Или вы все еще ищете решение? – nrussell

+0

@nrussell Это воодушевляет. Основная цель SO - не помогать OP, а создавать ресурс для других. – Roland

+0

@Roland Хорошо, я не был уверен в этикете, но я просмотрел его на Meta stack exchange. Спасибо. – nrussell

Смежные вопросы