У меня есть следующая проблема в R:
Предположим, что следующий кадр данных:
a b c d e
1 1 1 1 1 15.5
2 1 1 1 2 8.3
3 1 1 2 1 12.4
4 1 1 2 2 3.2
...
Я хочу применить функцию f(x,y)
к числам из столбца e
, где x и y взяты из двух строк, которые имеют одинаковые значения во всех столбцах, кроме d
(и, конечно, e
). ).
Выходными данными должен быть новый фрейм данных, в котором столбец d
отбрасывается (так как «слияние» делает этот столбец неактуальным), а столбец e
является результатом примененной функции.
Таким образом, в примере выше, предполагая, что f(x,y)
является сложением, новый фрейм данных должен выглядеть следующим образом:
a b c e
1 1 1 1 23.8
3 1 1 2 15.6
...
То, что я пробовал до сих пор, выглядит примерно так, что выглядит очень не элегантно:
data.d1 <- subset(data, d==1)
for (index in 1:nrow(data.d1))
row1 <- data.d1[index,]
row2 <- data[data$a==row1$a & data$b==row1$b & data$c==row1$c & data$d==2,]
data[index,"e"] <- f(row1$e, row2$e)
}
data <- data[-match(c("d"), names(data))]
Есть ли у кого-нибудь более чистое решение, использующее apply()
и т.п.?
Заранее спасибо!