R - 按分组行观察折叠数据

标签 r dataframe dplyr data-analysis data-cleaning

我正在处理住院记录的大型数据框架。许多患者曾两次或多次住院,而他们的既往病史在一次或多次住院时可能不完整。我想将他们每次住院的所有信息折叠成每个患者的医疗问题的单一列表。

这是一个示例数据框:

 id <- c("123","456","789","101","123","587","456","789")
 HTN <- c(TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 
 FALSE)
 DM2 <- c(FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE)
 TIA <- c(TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE)
 df <- data.frame(id,HTN,DM2,TIA)
 df

结果是:

 > df
    id   HTN   DM2   TIA
 1 123  TRUE FALSE  TRUE
 2 456 FALSE FALSE  TRUE
 3 789 FALSE  TRUE  TRUE
 4 101 FALSE  TRUE  TRUE
 5 123 FALSE FALSE FALSE
 6 587  TRUE  TRUE  TRUE
 7 456 FALSE FALSE  TRUE
 8 789 FALSE  TRUE  TRUE

我希望我的输出如下所示:

  id <- c("101","123","456","587","789")
  HTN <- c(FALSE,TRUE,FALSE,TRUE,FALSE)
  DM2 <- c(TRUE,FALSE,FALSE,TRUE,TRUE)
  TIA <- c(TRUE,TRUE,TRUE,TRUE,TRUE)
  df2 <- data.frame(id,HTN,DM2,TIA)
  df2

    id  HTN  DM2 TIA
 1 101 FALSE  TRUE TRUE
 2 123  TRUE FALSE TRUE
 3 456 FALSE FALSE TRUE
 4 587  TRUE  TRUE TRUE
 5 789 FALSE  TRUE TRUE

到目前为止,我有一个很好的预感,即安排和分组我的数据是正确的起点,并且我认为我可以通过为每个医疗问题创建一个新变量来使其发挥作用。不过,我有大约 30 个医疗问题,我需要以这种方式崩溃,而且这么多重复的代码似乎会导致神秘错误。

 df3 <- df %>%
   arrange(id) %>%
   group_by(id)

环顾四周,我还没有找到一种特别优雅的方法来解决这个问题。是否有一些我忽略的巧妙的 dplyr 函数?

最佳答案

我们可能会使用

df %>% group_by(id) %>% summarize_all(any)
# A tibble: 5 x 4
#   id    HTN   DM2   TIA  
#   <fct> <lgl> <lgl> <lgl>
# 1 101   FALSE TRUE  TRUE 
# 2 123   TRUE  FALSE TRUE 
# 3 456   FALSE FALSE TRUE 
# 4 587   TRUE  TRUE  TRUE 
# 5 789   FALSE TRUE  TRUE

通过这种方式,我们首先确实按照 id 进行分组,正如您所建议的那样。然后我们使用函数 summarize 对变量进行 all any :我们提供一个逻辑向量(例如,患者 HTN101 ),如果在任何行中我们有 TRUETRUE ,则返回 FALSE

关于R - 按分组行观察折叠数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53819374/

相关文章:

r - dplyr 通过评估查找单元格值来改变特定列

r - 对向量中的重复项进行排序和评估

r - 错误没有带有 R Markdown 的名为 RevoUtilsMath 的包

r - 数据框所有列中的测试条件

python - 在 python 中比较数据帧的两列时出现错误结果

python - Python 中的 plyr 或 dplyr

r - 使用聚合的数据帧子集的相关性

r - ggplot 中的森林图,引用水平来自回归模型

python - Pandas:将 IP 解析为国家/地区的最快方法

r - 如何创建具有列子集的平均差异的列?