Слияние на основе имен столбцов - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть следующий data.frame:

> head(y)

 depth value   1   2   3   4   5   6   7
 1 7 -82 -81 -80 -79 -78 -78 -77
 1 5 -82 -81 -80 -79 -78 -78 -77
 1 5 -82 -81 -80 -79 -78 -78 -77
 1 2 -82 -81 -80 -79 -78 -78 -77
 1 2 -82 -81 -80 -79 -78 -78 -77
 1 1 -82 -81 -80 -79 -78 -78 -77

Мне нужно объединить data.frame на основе значений столбца «value» и получить соответствующее значение из «1»: «7»колонны.Я хотел бы получить следующий результат:

depth value   merged_value
1 7 -77
1 5 -78
1 5 -78
1 2 -81
1 2 -81
1 1 -82 

Я спрашиваю об этом, потому что у меня есть миллионы строк, и работа с классическими циклами идет слишком медленно.Заранее спасибо!Jon

1 Ответ

0 голосов
/ 28 ноября 2018

Я полностью повторяю этот ответ:

В R вам не нужно перебирать матрицы или data.frames.R работает по своей векторизации.Итак, давайте выберем правильный столбец с вектором.

Чтобы выбрать в качестве матрицы из матрицы, мы должны установить подмножество с матрицей.Сравните следующее.vals - это подмножество значений, которые вы хотите «объединить»:

vals <- as.matrix(y[,3:9])
vals[y[,2]]

и сравнить с cbind (1: nrow (vals), y [, 2]) vals [x]

Видите ли вы разницу?

Теперь соедините правильные строки:

vals <- as.matrix(y[,3:9])
x <- cbind(1:nrow(vals), y[,2])
cbind(y[,1:2], vals[x])

Или слегка улучшенное издание:

x <- cbind(1:nrow(y), y[,2]+2)
cbind(y[,1:2], y[x])
...