使用 RLE 删除每行的连续重复项并检查 R 中的序列逻辑

Remove consecutive duplicates per row with RLE and check logic of sequence in R

对于具有患者路径(例如到达 -> Area 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.callrbindlist()unlist() 的各种版本,但其中 none 似乎对我有用。

第 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。我不知道该怎么做...

第 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 步:(待定,待定“可能的途径”)