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

问题:要对 中的处方药使用情况进行一些调查分析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,我也希望将其计入TRUEID 折叠为一行的时间。

我试过的:

主要是,我一直在尝试处理这篇文章,虽然我觉得我已经接近了,但还是出现了错误。这是我的尝试:

df <- df[, lapply(.SD, paste0, collapse=""), by=ID]

哪个产量unused argument (by = ID)。我在同一篇文章中尝试了另一种方法,但这更麻烦,需要我将数据设为data.table. 我需要将事情保留为data.frame.

有任何想法吗?

回答

我们可以使用any代替pasteas anywill 检查列中的任何 TRUE 元素,按“ID”分组

library(data.table)
setDT(df)[, lapply(.SD, any), ID]

-输出

#   ID cardiovasc beta_blockers antibiotics
#1:  a       TRUE         FALSE        TRUE


以上是在R中,将同一ID的多个逻辑行折叠为1行的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>