我有一个数据,病人有多个观察的药物使用时间。一些病人一直使用药物,而另一些病人有空白,而我正在努力统计那些从未使用过药物的病人。
我无法显示实际的数据,但下面是我正在使用的示例数据框架。
patid meds
1 0
1 1
1 1
2 0
2 0
3 1
3 1
3 1
4 0
5 1
5 0因此,从这两个病人(4和2)从来没有使用药物。这就是我要找的。
我对R相当陌生,不知道该如何做,任何一个人都会很感激。
发布于 2020-07-22 14:49:45
试试这个:
library(dplyr)
#Data
df <- structure(list(patid = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 4L,
5L, 5L), meds = c(0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L)), class = "data.frame", row.names = c(NA,
-11L))
#Code
df %>% group_by(patid) %>% summarise(sum=sum(meds,na.rm=T)) %>% filter(sum==0)
# A tibble: 2 x 2
patid sum
<int> <int>
1 2 0
2 4 0发布于 2020-07-22 16:36:06
这里是dplyr包的另一种选择。
library(dplyr)
df <- data.frame(patid = c(1,1,1,2,2,3,3,3,4,5,5),
meds = c(0,1,1,0,0,1,1,1,0,1,0))
df %>%
distinct(patid, meds) %>%
arrange(desc(meds))%>%
filter(meds == 0 & !duplicated(patid))
# patid meds
#1 2 0
#2 4 0 发布于 2020-07-22 14:55:14
基本R的解决方案可以是
subset(aggregate(meds ~ patid, df, sum), meds == 0)回传
patid meds
2 2 0
4 4 0https://stackoverflow.com/questions/63036981
复制相似问题