#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. Это мне очень помогает! Спасибо