使用 RLE 删除每行的连续重复项并检查 R 中的序列逻辑
Posted
技术标签:
【中文标题】使用 RLE 删除每行的连续重复项并检查 R 中的序列逻辑【英文标题】:Remove consecutive duplicates per row with RLE and check logic of sequence in R 【发布时间】:2022-01-13 14:42:06 【问题描述】:对于具有患者路径(例如到达 -> 区域 A -> 病房)的数据集,我有一个两步数据清理问题。这是数据外观的示例:
df <- data.frame(Patient = c(1,2,3,4,5),
Area1 = c("Arrival1", "Arrival1", "Arrival2", "Arrival1", "Arrival2"),
Area2 = c("Area A", "Diagnostics", "Area A", "Area B", NA),
Area3 = c("Area B", "Diagnostics", "Area B", "Area A", NA),
Area4 = c("Ward", "Ward", "Area B", "Area C", NA),
Area5 = c(NA, NA, "Ward", "Arrival", NA)
)
第 1 步:删除连续列中的重复项 有些患者在连续列中有重复,例如对于患者 2(诊断 -> 诊断)和患者 3(区域 B -> 区域 B)。我需要这些是独特的途径。
我已经使用apply()
和rle()
解决了这个问题:
df1 <- apply(df,1,rle)
但是,这给了我一个(大)列表,其中包含值和长度。如何将其传输回上述表格的数据框(即保留患者 ID 和值)?我尝试了各种版本的do.call
、rbindlist()
和unlist()
,但它们似乎都不适合我。
第 2 步:检查路径逻辑 假设我们现在有一个干净的数据集:
dfclean <- data.frame(Patient = c(1,2,3,4,5),
Area1 = c("Arrival1", "Arrival1", "Arrival2", "Arrival1", "Arrival2"),
Area2 = c("Area A", "Diagnostics", "Area A", "Area B", NA),
Area3 = c("Area B", "Ward", "Area B", "Area A", NA),
Area4 = c("Ward", NA, "Ward", "Area C", NA),
Area5 = c(NA, NA, NA, "Arrival", NA)
)
现在我需要检查路径的逻辑。为此,我有第二个数据集,其中列出了所有可能的路径,我需要根据数据集 2 检查数据集 1 中的每个路径是否“可能”。假设数据集 2 如下所示:
df2 <- data.frame(Patient = c(1,2,3,4,5),
Area1 = c("Arrival1", "Arrival1", "Arrival2", "Arrival1", "Arrival2"),
Area2 = c("Area A", "Diagnostics", "Area A", "Area B", NA),
Area3 = c("Area B", "Area A", "Area B", "Area A", NA),
Area4 = c("Ward", "Ward", "Ward", "Area C", NA),
Area5 = c(NA, NA, NA, NA, NA)
)
我想创建一个变量,为有效途径(例如患者 1)指示 TRUE,为无效途径(例如患者 4)指示 FALSE。我不知道该怎么做...
【问题讨论】:
可能路径的“第二个数据集”在哪里? 在上面。 “假设数据集 2 看起来像这样:” 你是说每个病人都有不同的可能途径? 【参考方案1】:第 1 步:
df[,-1] <- data.frame(t(apply(df[,-1], 1, function(z)
r <- rle(z)
c(r$values, rep(NA, length(z) - length(r$values)))
)))
df
# Patient Area1 Area2 Area3 Area4 Area5
# 1 1 Arrival1 Area A Area B Ward <NA>
# 2 2 Arrival1 Diagnostics Ward <NA> <NA>
# 3 3 Arrival2 Area A Area B Ward <NA>
# 4 4 Arrival1 Area B Area A Area C Arrival
# 5 5 Arrival2 <NA> <NA> <NA> <NA>
第 2 步:(待定,待定“可能的途径”)
【讨论】:
以上是关于使用 RLE 删除每行的连续重复项并检查 R 中的序列逻辑的主要内容,如果未能解决你的问题,请参考以下文章