Условное вычитание значений строки на основе 2 условий - PullRequest
2 голосов
/ 02 декабря 2019

У меня есть длинная форма данных, подмножество ниже. Что мне нужно сделать, это настроить столбец значения на основе столбцов Ответ и Дата. Мне нужно настроить столбец значения для строк, где отклик = фотосинтез. Если ответ = фотосинтез, мне нужно вычесть значение, где ответ = дыхание. Я также повторил измерения в разные даты, поэтому значения дыхания и фотосинтеза должны быть с одной и той же даты. Я думаю, что ifelse будет работать, но я не могу получить правильный синтаксис.

test <- structure(list(variable = c(221L, 221L, 44L, 44L, 221L, 221L, 44L, 44L), value = 
c(-1.21625718690742, 1.15247376323723, -0.374982444111372, -0.1080667523228, 
-0.344666861319387, 0.453100231803574, -0.200976470494833, 0.100700409657002), Date = 
structure(c(18155, 18155, 18155, 18155, 18171, 18171, 18171, 18171), class = "Date"), 
Response = c("Respiration", "Photosynthesis", "Respiration", "Photosynthesis", "Respiration", 
"Photosynthesis", "Respiration", "Photosynthesis")), row.names = c(NA, -8L), groups = 
structure(list(variable = c(44L, 44L, 221L, 221L), Date = structure(c(18155, 18171, 18155, 
18171), class = "Date"), .rows = list(3:4, 7:8, 1:2, 5:6)), row.names = c(NA, -4L), class = 
c("tbl_df", "tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", "tbl_df", "tbl", 
"data.frame"))

1 Ответ

0 голосов
/ 02 декабря 2019

Мы можем просто сделать diff, так как данные уже сгруппированы и имеют только 2 наблюдения на группу

library(dplyr)
test %>%
    mutate(value = c(first(value), diff(value)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...