Прикрепленные данные:
id = c (2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
vm = c("13", "14", "15", "16", "17", "19", "20", "21", "22", "23")
GE = c("0", "0", "0", "0" "0", "0", "1", "0", "1","0")
fichier <- data.frame(id, vm, GE)
Прикрепленный код R:
library(tidyverse)
fichier <- fichier %>%
mutate(statut = case_when(
fichier$vm == 13 & fichier$GE == 1 ~ "infection",
fichier$vm == 14 & fichier$GE == 1 ~ "infection",
fichier$vm == 15 & fichier$GE == 1 ~ "infection",
fichier$vm == 16 & fichier$GE == 1 ~ "infection",
fichier$vm == 17 & fichier$GE == 1 ~ "infection",
fichier$vm == 19 & fichier$GE == 1 ~ "infection",
fichier$vm == 20 & fichier$GE == 1 ~ "infection",
fichier$vm == 21 & fichier$GE == 1 ~ "infection",
fichier$vm == 22 & fichier$GE == 1 ~ "infection",
fichier$vm == 23 & fichier$GE == 1 ~ "infection",
TRUE ~ "noinfection")
)
Прикрепленные результаты:
id = c (2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
vm = c("13", "14", "15", "16", "17", "19", "20", "21", "22", "23"),
GE = c("0", "0", "0", "0" "0", "0", "1", "0", "1","0"),
statut = c("noinfection", "noinfection", "noinfection", "noinfection", "noinfection", "noinfection", "infection", "noinfection", "infecton", "noinfection")
fichier <- data.frame(id, vm, GE, status)
Пожалуйста, я хотел бы иметь возможность заполнить переменную «статус» в vm = 18 и vm = 24.
а) Я хотел бы дать этой переменной значение vm = 18
- значение 0, если ГЭ = 0 во время предыдущих посещений с 13 по 17.
- значение 1, если ГЭ = 1 во время предыдущих посещений с 13 по 17.
б) Я хотел бы дать этой переменной значение vm = 24.
- значение 0, если ГЭ = 0 во время предыдущих посещений с 19 по 23.
- значение 1, если ГЭ = 1 во время предыдущих посещений с 19 по 23.
Было бы здорово, если бы вы объяснили, для чего нужен прикрепленный код r!
Я мог бы сделать что-то очень конкретное для этих значений (например, 18 и 24), но, не зная основных причин того, что вы спрашиваете, трудно понять, действительно ли я даю вам хорошее решение.
Здравствуйте, спасибо за ваши ответы! Ранее я показывал код R, который использовал для определения статуса зараженного/неинфицированного для определенных посещений (для них нет проблем).
Но конкретно для посещений через 18 и 24 месяца мне нужно создать переменную, учитывающую данные предыдущих посещений. И для этого я не могу найти никаких R-кодов. У вас есть идеи по этому поводу?
Какое конкретное решение у вас есть для этих значений (т.е. 18 и 24)?
В вашем описании я вижу два возможных сценария:
В любом случае, я добавил решения для обоих сценариев.
Загрузите необходимые пакеты и ваши данные:
library(dplyr)
library(tidyr)
# Your sample data
id <- c (2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
vm <- c("13", "14", "15", "16", "17", "19", "20", "21", "22", "23")
GE <- c("0", "0", "0", "0", "0", "0", "1", "0", "1","0")
fichier <- data.frame(id, vm, GE)
Сценарий 1:
# Add missing data if all previous visit == 0 or any previous visits == 1
fichier <- fichier |>
mutate(across(c(vm, GE), as.integer)) |>
group_by(id) |> # assuming your data may have multiple id values
complete(vm = 13:24) |>
fill(id, .direction = "down") |>
mutate(tmp = if_else(vm <= 18, 1, 2)) |>
group_by(id, tmp) |>
mutate(GE = case_when(is.na(GE) & sum(GE, na.rm = TRUE) == 0 ~ 0,
is.na(GE) & sum(GE, na.rm = TRUE) > 0 ~ 1,
.default = GE),
status = if_else(GE == 1, "infection", "noinfection")) |>
ungroup() |>
select(-tmp)
fichier
# # A tibble: 12 × 4
# id vm GE status
# <dbl> <int> <dbl> <chr>
# 1 2 13 0 noinfection
# 2 2 14 0 noinfection
# 3 2 15 0 noinfection
# 4 2 16 0 noinfection
# 5 2 17 0 noinfection
# 6 2 18 0 noinfection
# 7 2 19 0 noinfection
# 8 2 20 1 infection
# 9 2 21 0 noinfection
# 10 2 22 1 infection
# 11 2 23 0 noinfection
# 12 2 24 1 infection
Сценарий 2:
# Add missing data if all previous visit == 0 or all previous visits == 1
fichier <- fichier |>
mutate(across(c(vm, GE), as.integer)) |>
group_by(id) |> # assuming your data may have multiple id values
complete(vm = 13:24) |>
fill(id, .direction = "down") |>
mutate(tmp = if_else(vm <= 18, 1, 2)) |>
group_by(id, tmp) |>
mutate(tmp1 = +(n_distinct(GE, na.rm = TRUE) == 1),
GE = case_when(is.na(GE) & tmp1 == 1 & first(GE) == 0 ~ 0,
is.na(GE) & tmp1 == 1 & first(GE) == 1 ~ 1,
.default = GE),
status = case_when(GE == 0 ~ "noinfection",
GE == 1 ~ "infection",
.default = "mixed")) |>
ungroup() |>
select(-starts_with("tmp"))
fichier
# # A tibble: 12 × 4
# id vm GE status
# <dbl> <int> <dbl> <chr>
# 1 2 13 0 noinfection
# 2 2 14 0 noinfection
# 3 2 15 0 noinfection
# 4 2 16 0 noinfection
# 5 2 17 0 noinfection
# 6 2 18 0 noinfection
# 7 2 19 0 noinfection
# 8 2 20 1 infection
# 9 2 21 0 noinfection
# 10 2 22 1 infection
# 11 2 23 0 noinfection
# 12 2 24 NA mixed
Готово, хорошего дня!
Мой предыдущий вопрос больше не открывался. Поэтому мне пришлось создать еще один вопрос. Вы можете переместить ответ по этой ссылке. stackoverflow.com/questions/78800544/…
@user25334460 user25334460 - добавил решения по вашему новому вопросу.
что ты пробовал? StackOverflow помогает отвечать на вопросы, которые могут возникнуть у других, это не просто бесплатный сервис для написания кода.