如何计算字符串出现的次数?

时间:2020-05-04 10:25:02

标签: r

我有一个像这样的数据集

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)

我要做的是计算每个患者降低剂量水平的次数。 结果将是:

enter image description here

先谢谢您。感谢您的帮助。

4 个答案:

答案 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))}))