Это может быть базовое, но я пытался понять это в течение нескольких дней и не нашел ответа.Функция, определенная пользователем, основанная на нескольких столбцах, сгруппированных по категориям
Я пытаюсь вычислить новое количество, основанное на концентрации двух столбцов и области, сгруппированных по «водосборной». Я написал функцию для расчета разницы в концентрации для каждой строки и строки с наибольшей площадью, нормированной по доле площади в этом водосборном бассейне, но она не будет работать с dplyr
или aggregate
(она отлично работает, но затем возвращает список
в идеале, я хочу, чтобы добавить столбец на dataframe или полностью заменить колонку концентрации Вот dataframe «лев»:..
area catchment concentration
1 1 Yup 2.00000
2 10 Yup 40.50000
3 25 Yup 50.82031
4 35 Yup 50.00000
5 1 Nope 1.00000
6 10 Nope 5.00000
7 25 Nope 40.08333
8 35 Nope 38.00000
Здесь функция:
lever <- function(data=lev, x=data[,"concentration"], y=data[,"area"]){
N= which.max(y)
L = (x - x[N]) * y/max(y)
return(L)}
И здесь это желаемый результат:
area catchment concentration leverage
1 1 Yup 2.00000 -1.3714286
2 10 Yup 40.50000 -2.7142857
3 25 Yup 50.82031 0.5859375
4 35 Yup 50.00000 0.0000000
5 1 Nope 1.00000 -1.0571429
6 10 Nope 5.00000 -9.4285714
7 25 Nope 40.08333 1.4880952
8 35 Nope 38.00000 0.0000000
Используя by
, я могу получить два списка с результатами для каждого водосбора:
by(lev, lev$catchment, lever)
, но я хочу использовать функцию на несколько столбцов, классифицированных несколькими факторами (например, дата в дополнение к водосборной площади), и я получаю
'неверное количество измерений'
ошибок с doBy
и dplyr
.
Мы можем дать лучшие ответы, если вы предоставите [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5965451#5965451). –
Благодарим за редактирование, чтобы сделать его воспроизводимым. Я буду делать в следующий раз :) – benjabiker