我有一个数据集,其中包括在两个时间点(第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种寄生虫),但在第2次就诊时只携带1种寄生虫(第1种寄生虫),与第一次发病时的一种寄生虫相匹配。
病人2在第一次就诊时携带3种寄生虫(第1、2和3种寄生虫),但在第2次就诊时,他们携带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"))发布于 2019-04-04 22:58:03
这不是最好的方式,但逻辑应该是可以理解的:
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] TRUEhttps://stackoverflow.com/questions/55525746
复制相似问题