我有一个像这样的数据集
PT <- c(1,1,1,1,2,2,2,3,3,3,3,3)
visit <- c("w1","w2","w3","w4","w1","w2","w3","w1","w2","w3","w4","w5")
dose_level <- c("250", "250", "200", "200", "250", "250", "250", "200","200","150", "150", "100")
test <- data.frame(PT, visit, dose_level)
我要做的是计算每个患者降低剂量水平的次数。 结果将是:
先谢谢您。感谢您的帮助。
答案 0 :(得分:3)
在基数R中,可以使用aggregate
完成。
aggregate(dose_level ~ PT, test, function(x){
y <- as.integer(as.character(x))
sum(diff(y) < 0)
})
# PT dose_level
#1 1 1
#2 2 0
#3 3 2
答案 1 :(得分:2)
我猜病人3应该是2?
PT <- c(1,1,1,1,2,2,2,3,3,3,3,3)
visit <- c("w1","w2","w3","w4","w1","w2","w3","w1","w2","w3","w4","w5")
dose_level <- c("250", "250", "200", "200", "250", "250", "250", "200","200","150", "150", "100")
test <- data.frame(PT,visit, dose_level)
library(data.table)
setDT(test)[,.(times=sum(dose_level<shift(dose_level),na.rm = TRUE)),by=.(PT)]
#> PT times
#> 1: 1 1
#> 2: 2 0
#> 3: 3 2
答案 2 :(得分:0)
FileAttachment
答案 3 :(得分:0)
R类一个(模糊的)衬里:
data.frame(PT = unique(PT),
times = sapply(split(test, test$PT), function(x){sum(c(FALSE, abs(diff(as.numeric(x$dose_level))) > 0))}))