在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