У меня есть набор данных, который имеет много наблюдений для данного местоположения. Каждое наблюдение (определяемое сайтом, имеющим несколько столбцов дескрипторов) содержит измерение (также определяемое несколькими столбцами дескрипторов). В качестве сокращенного примера:
t<-tibble(loc_name=c('A','A', 'B', 'B', 'C', 'C'),
loc_desc=c('X', 'X', 'Y', 'Y', 'Z', 'Z'),
qualifier=c(NA, NA, NA, 'U', 'J', NA),
analyte=rep(c('Clay', 'Silt'),3),
units=rep('percent',6),
values=c(0.25, 1, 0.5, 2, 0.75, 3))
loc_name loc_desc qualifier analyte units values
<chr> <chr> <chr> <chr> <chr> <dbl>
1 A X NA Clay percent 0.25
2 A X NA Silt percent 1
3 B Y NA Clay percent 0.5
4 B Y U Silt percent 2
5 C Z J Clay percent 0.75
6 C Z NA Silt percent 3
В этих данных «loc_name» и «loc_des c» описывают местоположение образца, в котором каждый из них собирал ил и глину. «Квалификатор», «аналит» и «единицы измерения» - все это информация о «значениях».
Что мне нужно сделать, так это вычислить новое значение аналита, «Штрафы» (Clay + Silt). Я бы развернул таблицу шире, чтобы сделать это проще, но, учитывая объем информации в столбцах, он выглядит примерно так:
t %>%
pivot_wider(names_from=analyte, values_from=values)
loc_name loc_desc qualifier units Clay Silt
<chr> <chr> <chr> <chr> <dbl> <dbl>
1 A X NA percent 0.25 1
2 B Y NA percent 0.5 NA
3 B Y U percent NA 2
4 C Z J percent 0.75 NA
5 C Z NA percent NA 3
, что не совсем удобно для расчетов.
Конечный результат должен выглядеть следующим образом:
loc_name loc_desc qualifier analyte units values
<chr> <chr> <chr> <chr> <chr> <dbl>
1 A X NA Clay percent 0.25
2 A X NA Silt percent 1
3 A X NA Fines percent 1.25
4 B Y NA Clay percent 0.5
5 B Y U Silt percent 2
6 B Y NA Fines percent 2.5
7 C Z J Clay percent 0.75
8 C Z NA Silt percent 3
9 C Z NA Fines percent 3.75
Есть ли способ выполнить этот расчет без объединения всех столбцов, изменяющих местоположение и изменяющих значение? Или, если мне нужно, есть ли способ сделать это, который не будет большим беспорядком (имея в виду, что у меня на самом деле есть 19 столбцов информации)? Единственное решение, которое у меня есть сейчас, - это сделать новый тиббл, в котором можно рассчитать «штрафы» для каждого образца и прикрепить его обратно в виде новых строк (что, я думаю, должно работать? Но это выглядит не элегантно).
Спасибо за вашу помощь!