在R中基于特定条件计算值?

3

我有一个数据集,并尝试计算每个患者拥有的代码数量以及每个患者拥有的感兴趣代码数量。

假设我有下面这张表格,我的感兴趣代码是26。

patient code
1       25   
1       26  
1       39
1       26
1       86
2       26 
2       24 
2       89
3       56 
3       45 
3       26
3       89 
4       56
4       25 
4       66
4       56

病人1共有5个编码,其中2个是感兴趣的编码。

病人2共有3个编码,其中1个是感兴趣的编码。

病人3共有4个编码,其中1个是感兴趣的编码。

病人4共有4个编码,没有感兴趣的编码。

如何用R实现这个问题呢?谢谢!

3个回答

2
这里有一个tidyverse方法。
首先,你需要使用group_by(patient),以便Rpatient计算为一组。然后使用summarise()对每个患者中的代码数量进行计算n(),并计算每个患者中出现26的次数(sum(code == 26))。
library(tidyverse)

df %>% group_by(patient) %>% 
  summarize(Total_codes = n(), 
            Codes_of_interest = sum(code == 26))

# A tibble: 4 x 3
  patient Total_codes Codes_of_interest
    <int>       <int>             <int>
1       1           5                 2
2       2           3                 1
3       3           4                 1
4       4           4                 0

0
假设您有一个名为dtdata.table,其中包含变量patientcode
library(data.table)
dt <- data.table(patient = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 
                                 3L, 3L, 3L, 4L, 4L, 4L, 4L), code = c(25L, 26L, 39L, 26L, 86L, 
                                                                       26L, 24L, 89L, 56L, 45L, 26L, 89L, 56L, 25L, 66L, 56L))

with(dt[code == 26], ftable(patient))

这是输出结果

patient 1 2 3
             
        2 1 1

0
这是一个使用的方法:
library(data.table)

setDT(dt)[ , list(cases = .N, interest = sum(code == 26)), by=patient]

输出

   patient cases interest
1:       1     5        2
2:       2     3        1
3:       3     4        1
4:       4     4        0

数据

dt <- structure(list(patient = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 4L, 4L, 4L, 4L), code = c(25L, 26L, 39L, 26L, 86L, 
26L, 24L, 89L, 56L, 45L, 26L, 89L, 56L, 25L, 66L, 56L)), class = "data.frame", row.names = c(NA, 
-16L))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接