问题:对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
而不是 paste
如 any
将检查列中的任何 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/