Извлечь значения из фрейма данных, используя векторы индексации для строки и столбца? - PullRequest
2 голосов
/ 26 марта 2020

Мне нужен лучший метод для извлечения значений из фрейма данных с использованием индексных векторов как для строк, так и для столбцов. Пример ниже работает нормально, но я предполагаю, что есть более эффективные методы, использующие какой-то трюк sapply или purr :: map?

df <- data.frame(a = c("a1","a2", "a3", "a4"), b= c("b1","b2", "b3", "b4"), stringsAsFactors = F)
col_selector <- sample(as.integer(c(1,2)), size = 10, replace = T)
row_selector <- sample(as.integer(c(1:4)), size = 10, replace = T)

v = character()
for (i in seq_along(col_selector)) {
  v = c(v, df[row_selector[i], col_selector[i]])
} 
print(v)
[1] "a4" "a3" "a4" "a2" "a3" "a1" "b1" "b1" "b3" "b1"

Ответы [ 2 ]

3 голосов
/ 26 марта 2020

Лично я думаю, что ответ @ akrun - самый элегантный подход. Вот еще одно базовое решение R, использующее mapply

v <- mapply(function(x,y) df[x,y], row_selector,col_selector)
3 голосов
/ 26 марта 2020

Мы можем использовать cbind для создания matrix индекса строки / столбца и использовать его для извлечения элементов из набора данных

v2 <- df[cbind(row_selector, col_selector)]
identical(v, v2)
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...