Выбор разных элементов R фрейма данных (по одному для каждой строки, но, возможно, разных столбцов) без использования циклов

#r #dataframe

#r #фрейм данных

Вопрос:

Допустим, у меня есть data.frame произвольные размеры ( n by p ). Я хочу извлечь n из этого вектор длины data.frame , по одному элементу в векторе на строку в data.frame . Однако столбец, в котором находится каждый элемент, может отличаться в зависимости от строки. Есть ли способ сделать это без циклов?

Например, если у меня есть следующий (3×3) фрейм данных, называемый say DATA

 X   Y   Z
1  17  43
3   4   2
6   9   0
 

Я хочу извлечь одно скалярное значение из ДАННЫХ для каждой строки. У меня есть вектор, назовите его column.list, c(1,3,1) (в данном случае выбранный произвольно), который дает индекс столбца для нужных мне элементов, где k-й элемент столбца.список — это индекс столбца для строки k в ДАННЫХ. Как мне сделать это без циклов? Я хочу избегать циклов, потому что я использую это неоднократно в исследовании моделирования, которое займет много времени даже без циклов, а номер строки может быть 100 000 или около того. Очень признателен!

Ответ №1:

Вы можете сделать это, индексируя свой data.frame с помощью матрицы. Первый столбец указывает строку, второй указывает столбец. Так что, если вы сделаете

 column.list <- c(1,3,1) 
DATA[cbind(1:nrow(DATA), column.list)]
 

Вы получите

 [1] 1 2 6
 

по желанию. Если вы смешиваете столбцы разных классов, все переменные будут приведены к наиболее подходящему типу данных.

Комментарии:

1. Это мне очень помогает! Спасибо