У меня есть фрейм данных с тремя столбцами: один для идентификации, один с главной переменной и один с некоторыми значениями, которые будут использоваться для вычислений второго. Я хотел бы разделить второе на третье, но этот третий столбец имеет значения только на одном срезе.
Может быть, пример будет более понятным:
df <- data.frame(x = c("A", "B", "C", "A", "B", "C"),
y = c(2, 4, NA, 6, 6, 7),
z = c(NA, NA, NA, 8, 5, 3))
Вот ожидаемый результат:
df_expected <- data.frame(x = c("A", "B", "C", "A", "B", "C"),
y = c(2/8, 4/5, NA, 6/8, 6/5, 7/3),
z = c(NA, NA, NA, 8, 5, 3))
Как видите, я бы хотел сгруппировать наблюдения по столбцу id x
, а затем разделить столбец y
на столбец z
.
Это то, что я 'мы сделали до сих пор:
library(dplyr)
computation <- function(t){
df$t <- ifelse(df$z == NA, NA, df$t/df$z)
}
df %>%
group_by(x) %>%
mutate_at(c("y"), .funs = computation)
но у меня есть ошибка:
Erreur : Column `y` must be length 2 (the group size) or one, not 6
Как я могу это сделать? Я почти уверен, что мой вопрос уже задан и что он довольно прост, но я не могу понять, как это сделать.