R语言epicontacts包时间轴报错:'by'必须指定唯一有效列
解决epicontacts包绘制传播链时间轴时的
'by' must specify uniquely valid columns错误 这个报错的核心原因是数据关联时用于匹配的列存在重复值或无效记录,以下是具体解决步骤:
1. 检查并修复linelist的ID唯一性
linelist中的ID(默认是case_id)必须唯一,否则无法和contacts数据正确关联:
# 检查case_id是否存在重复 any(duplicated(mers_korea_2015[[1]]$case_id))
如果返回TRUE,对linelist去重后重新创建对象:
# 保留首次出现的唯一记录 unique_linelist <- mers_korea_2015[[1]][!duplicated(mers_korea_2015[[1]]$case_id), ] x <- make_epicontacts(linelist=unique_linelist, contacts = mers_korea_2015[[2]], directed=TRUE)
2. 验证x轴时间列的有效性
确保dt_onset列存在且为日期格式:
# 确认列存在 colnames(mers_korea_2015[[1]]) # 检查数据类型 class(mers_korea_2015[[1]]$dt_onset)
如果不是日期类型,转换格式:
mers_korea_2015[[1]]$dt_onset <- as.Date(mers_korea_2015[[1]]$dt_onset)
3. 过滤无效的联系记录
如果contacts中的from/to包含linelist中不存在的ID,会导致匹配失败:
# 筛选出from和to都在linelist中的有效记录 valid_contacts <- mers_korea_2015[[2]][ mers_korea_2015[[2]]$from %in% mers_korea_2015[[1]]$case_id & mers_korea_2015[[2]]$to %in% mers_korea_2015[[1]]$case_id, ] # 重新创建对象并绘图 x <- make_epicontacts(linelist=mers_korea_2015[[1]], contacts = valid_contacts, directed=TRUE) vis_epicontacts(x, x_axis = "dt_onset", thin = FALSE)
4. 使用clean参数自动清理数据
创建epicontacts对象时添加clean = TRUE,自动清理无效关联:
x <- make_epicontacts(linelist=mers_korea_2015[[1]], contacts = mers_korea_2015[[2]], directed=TRUE, clean = TRUE) vis_epicontacts(x, x_axis = "dt_onset", thin = FALSE)
内容的提问来源于stack exchange,提问作者Mllstrm
相关产品推荐
相关产品推荐

