r - 在 R 中,将同一 ID 的多个逻辑行折叠为 1 行

标签 r dataframe data.table

问题:R中的处方药使用情况做一些调查分析,我需要把同一个人(ID)的多行变成一行,表示TRUE如果任何上述行有 TRUE在里面。
这是数据:

df <- data.frame(ID = c("a","a","a","a","a","a"), 
                cardiovasc = c(T,T,T,T,T,T), 
                beta_blockers = c(F,F,F,F,F,F),
                antibiotics = c(T,F,F,F,F,F),
                stringsAsFactors=FALSE)
这是我希望它的样子:
goal <- data.frame(ID = c("a"),
                    cardiovasc = c(T), 
                    beta_blockers = c(F),
                    antibiotics = c(T),
                    stringsAsFactors=FALSE)
如您所知,即使 df$antibiotics只有 1 TRUE在数据集中,我想把它算作 TRUE当 ID 已折叠为一行时。
我试过的:
主要是,我一直在努力解决 this post ,虽然我觉得我很接近了,但我还是遇到了错误。这是我的尝试:
df <- df[, lapply(.SD, paste0, collapse=""), by=ID]
产生 unused argument (by = ID) .我在同一篇文章中尝试了另一种方法,但这更麻烦,并且需要我将数据设为 data.table .我需要将事情保留为 data.frame .
有任何想法吗?

最佳答案

我们可以使用 any而不是 pasteany将检查列中的任何 TRUE 元素,按“ID”分组

library(data.table)
setDT(df)[, lapply(.SD, any), ID]
-输出
#   ID cardiovasc beta_blockers antibiotics
#1:  a       TRUE         FALSE        TRUE

关于r - 在 R 中,将同一 ID 的多个逻辑行折叠为 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67696214/

相关文章:

r - R 中 'cumsum' 对象的 "difftime"的等效函数

r - R 数据帧中的重复数据删除/折叠记录

python - Pandas:.loc 未将一个数据帧的行分配给另一个数据帧切片的一行

python - 如何从 Pandas 数据框中提取日期/年/月?

r - 条件滚动平均值

r - 带有 na.rm=TRUE 参数的 data.table 和 pmin

r - 基于 join 更新 data.table 的子集

r - 为什么不带括号的 if-else 语句有时有效有时无效?

python - 数据框行迭代期间出错

r - 在 R/Rcpp 中过滤 data.frame 列表列内容的最快方法