根据 R 中的某些条件计算值?

Counting values based on certain conditions in R?

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

假设我下面有这个 table,我感兴趣的代码是 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,感兴趣代码 0

我如何在 R 中执行此操作?谢谢!

这是一个 tidyverse 方法。

首先您需要 group_by(patient) 以便 R 计算 patient 作为一个组。然后用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

假设你有一个名为 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

这是一个 data.table 方法:

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))