создать новую переменную на основе совпадений в группах внутри групп - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть набор данных, который включает участников, которые сообщают в клинику в два момента времени (эпизод 1 и эпизод 2).

Во время двух посещений они проверяются на двух, видят количество штаммов, заражающих паразитов.их, т. е.

df_1 <- structure(list(PID = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), parasite = c("parasite_1", 
"parasite_2", "parasite_1", "parasite_1", "parasite_2", "parasite_3", 
"parasite_4", "parasite_5"), episode = c("first_episode", "first_episode", 
"second_episode", "first_episode", "first_episode", "first_episode", 
"second_episode", "second_episode")), row.names = c(NA, -8L), class = c("data.table", 
"data.frame"))

Из набора данных:

пациент 1 вынашивает 2 паразита во время первого посещения (паразит 1 и 2), но во время второго посещения они питаются только 1 паразитом (паразит)1) и соответствует одному из паразитов из первого эпизода.

пациент 2 вынашивает 3 паразита во время своего первого посещения (паразит 1, 2 и 3), но во время своего второго посещения они питают 2 паразита (паразит 4и 5) и они не соответствуют ни одному из паразитов из первого эпизода.

Мне нужна помощь в разработке сценария, который создает новую переменную (инфекцию) и заполняет ее словом «тот же», если во время ихВо втором эпизоде ​​пациент представляет паразита из первого эпизода и «отличается», если он присутствует с паразитом, который отличаетсяот всех паразитов в первом эпизоде, то есть

df_2 <- structure(list(PID = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), parasite = c("parasite_1", 
"parasite_2", "parasite_1", "parasite_1", "parasite_2", "parasite_3", 
"parasite_4", "parasite_5"), episode = c("first_episode", "first_episode", 
"second_episode", "first_episode", "first_episode", "first_episode", 
"second_episode", "second_episode"), infeciton = c("same", "same", 
"same", "different", "different", "different", "different", "different"
)), row.names = c(NA, -8L), class = c("data.table", "data.frame"))

1 Ответ

1 голос
/ 05 апреля 2019

Не самый лучший способ, но логика должна быть понятна:

patients <- unique(df_1$PID)
df_3 <- df_1
df_3$infection <- NA
for (patient in patients){

  # getting your parasites into two lists
  first <- df_1[which(df_1$PID == patient & df_1$episode == "first_episode"), ]
  first <- first$parasite
  second <- df_1[which(df_1$PID == patient & df_1$episode == "second_episode"), ]
  second <- second$parasite

  # setting the infection 
  infection <- "different"
  for (parasite in second){
    if (parasite %in% first) {infection <- "same"}
    else {next}
  }
  df_3[which(df_3$PID == patient), "infection"] <- infection
}


# correcting the typo in colname in df_2:
df_2$infection <- df_2$infeciton
df_2 <- df_2[c("PID",   "parasite", "episode", "infection")]

# comparing the df_2 and df_3
identical(df_2, df_3)
# [1] TRUE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...