按组对总样本和阳性样本进行计数

时间:2018-07-06 18:28:56

标签: r

我有一个这样的数据框;

df <- data.frame(concentration=c(0,0,0,0,2,2,2,2,4,4,6,6,6),
             result=c(0,0,0,0,0,0,1,0,1,0,1,1,1))

我想计算每个浓度水平的结果总数。 我想计算每个浓度水平的阳性样品数。 我想创建一个新的数据框,其中包含浓度水平,总结果和正数。

conc pos_c total_c
0    0     4
2    1     4
4    1     2
6    3     3

这是我到目前为止使用plyr得出的结论;

c <- count(df, "concentration")
r <- count(df, "concentration","result")
names(c)[which(names(c) == "freq")] <- "total_c"
names(r)[which(names(r) == "freq")] <- "pos_c"
cbind(c,r)

  concentration total_c concentration pos_c
1             0       4             0     0
2             2       4             2     1
3             4       2             4     1
4             6       3             6     3

重复浓度列。我认为可能有一种更好/更轻松的方式来实现此目的,而我却不这么想。也许是另一个图书馆。我不确定如何在R中执行此操作,这对我来说还比较陌生。谢谢。

1 个答案:

答案 0 :(得分:3)

我们需要一个sum分组。使用tidyverse,我们按'浓度(group_by)分组,然后按summarise分组以得到逻辑表达式(sum的两列-1)result > 0 ,2)行数(n()

library(dplyr)
df %>% 
  group_by(conc = concentration) %>% 
  summarise(pos_c = sum(result > 0), # in the example just sum(result) 
                    total_c = n())
# A tibble: 4 x 3
#   conc pos_c total_c
#  <dbl> <int>   <int>
#1     0     0       4
#2     2     1       4
#3     4     1       2
#4     6     3       3

或者将base Rtableaddmargins一起使用

addmargins(table(df), 2)[,-1]