r按组计算正值的比例

Jua*_*chi 1 r

使用此数据框:

table <- "
    trt rep ss  d1  d4  d5  d6  d7
    1   1   1   0   0   0   0   0
    1   1   2   0   0   0   0   0
    1   1   3   0   0   1   2   2
    1   2   1   0   0   1   3   6
    1   2   2   0   1   1   2   4
    1   2   3   0   0   0   1   1
    1   3   1   0   0   0   0   0
    1   3   2   0   0   0   0   0
    1   3   3   0   1   1   1   1
    2   1   1   0   0   0   0   0
    2   1   2   0   0   0   1   1
    2   1   3   0   0   0   1   1
    2   2   1   0   0   0   0   0
    2   2   2   0   0   0   0   0
    2   2   3   0   0   0   0   1
    2   3   1   0   0   0   0   0
    2   3   2   0   0   0   1   3
    2   3   3   .   .   .   .   .
    "
d <- read.table(text=table, header = TRUE, check.names = F, na.strings = ".")
Run Code Online (Sandbox Code Playgroud)

我想获得一个数据帧,其中每天(d1,d4,...,d7)的trt为正值的比例如下表所示:

# trt    d1    d4     d5    d6    d7
# 1    0.00  0.22   0.44  0.56  0.56
# 2    0.00  0.00   0.00  0.38  0.50
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?提前致谢!

Fra*_*ank 6

感谢@ A.Webb,这里是基础R的一种方式:

aggregate(d[,4:8]>0~d$trt, FUN = mean)

#   d$trt d1        d4        d5        d6        d7
# 1     1  0 0.2222222 0.4444444 0.5555556 0.5555556
# 2     2  0 0.0000000 0.0000000 0.3750000 0.5000000
Run Code Online (Sandbox Code Playgroud)

这是我最初的想法:

rowsum(+(d[-(1:3)] > 0), d$trt, na.rm=TRUE) / 
  rowsum(+!is.na(d[-(1:3)]), d$trt, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

+是因为rowsum只能使用数字,而不能使用逻辑.

  • `集合体(d [,4:8]> 0〜d [1],FUN =平均值)` (3认同)