使用此数据框:
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)
有人可以帮我吗?提前致谢!
感谢@ 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只能使用数字,而不能使用逻辑.