#r
#r
Вопрос:
Я хочу вычислить M, SD, Min и Max для заданной переменной в моих данных. Образец данных является:
id-visit x
1-01 5
1-01 1
1-01 6
1-04 NA
1-04 NA
1-04 1
Пример кода является:
df1 <- df %>%
group_by(id-visit) %>%
mutate(x_M = mean(x, na.rm = T), x_MIN = min(x, na.rm = T),
x_MAX = max(x, na.rm = T), x_SD = sd(x, na.rm = T))
Когда я использую этот код, я получаю следующее сообщение об ошибке. Я полагаю, что это происходит потому, что я прошу R вернуть среднее значение для person 1-04, но у них есть только 1 значение, а остальные отсутствуют.
Есть ли способ, которым я могу сказать R присвоить этому человеку среднее значение 1, максимальное значение 1, минимальное значение 1 и SD, равное 0?
Warning messages:
1: Problem with `mutate()` input `x_MIN`.
ℹ no non-missing arguments to min; returning Inf
ℹ Input `x_MIN` is `min(x, na.rm = T)`.
ℹ The error occurred in group 499: subject_id = "1-04".
2: In min(x, na.rm = T) :
no non-missing arguments to min; returning Inf
3: Problem with `mutate()` input `x_MAX`.
ℹ no non-missing arguments to max; returning -Inf
ℹ Input `x_MAX` is `max(x, na.rm = T)`.
ℹ The error occurred in group 499: subject_id = "1-04".
4: In max(x, na.rm = T) :
no non-missing arguments to max; returning -Inf
Ответ №1:
Это предупреждающие сообщения. Вы можете replace
NA с 1/0 на основе имени столбца.
library(dplyr)
df %>%
group_by(id.visit) %>%
mutate(x_M = mean(x, na.rm = TRUE), x_MIN = min(x, na.rm = TRUE),
x_MAX = max(x, na.rm = TRUE), x_SD = sd(x, na.rm = TRUE),
across(x_M:x_MAX, tidyr::replace_na, 1),
x_SD = replace(x_SD ,is.na(x_SD), 0))
# id.visit x x_M x_MIN x_MAX x_SD
# <chr> <int> <dbl> <dbl> <dbl> <dbl>
#1 1-01 5 4 1 6 2.65
#2 1-01 1 4 1 6 2.65
#3 1-01 6 4 1 6 2.65
#4 1-04 NA 1 1 1 0
#5 1-04 NA 1 1 1 0
#6 1-04 1 1 1 1 0
Комментарии:
1. Спасибо @Ronak Shah. Очень признателен!