首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据组内组中的匹配创建新变量

根据组内组中的匹配创建新变量
EN

Stack Overflow用户
提问于 2019-04-04 22:20:41
回答 1查看 53关注 0票数 0

我有一个数据集,其中包括在两个时间点(第1集和第2集)向诊所报告的参与者。

在两次访问中,他们被检查了两次,看感染他们的寄生虫的种类有多少,即

代码语言:javascript
复制
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种寄生虫),与第一次发病时的任何一种寄生虫不匹配。

我需要帮助想出一个脚本来创建一个新的变量(感染),并在第二次发作期间用“相同”的方式填充它,如果病人在第一次发作时出现了寄生虫,如果他们出现了与第一集中的所有寄生虫不同的寄生虫,即

代码语言:javascript
复制
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"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-04 22:58:03

这不是最好的方式,但逻辑应该是可以理解的:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55525746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档