Как посчитать, сколько раз появляется строка? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть такой набор данных

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 ]

3 голосов
/ 04 мая 2020

В базе 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
2 голосов
/ 04 мая 2020

Полагаю, пациенту 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
0 голосов
/ 04 мая 2020

Base 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))}))
0 голосов
/ 04 мая 2020
test <- data.table(test)
test[,dose_level:=as.numeric(as.character(dose_level))]
test[,lag:=shift(dose_level,1),by="PT"]
#calculate difference between actual and lag
test[,diff:=dose_level-lag]
#flag to check if the diff is +ve or -ve 
test[,check:=ifelse(diff<0,1,0)]
test_summarise <- test[,.(sum(check,na.rm=T)),by="PT"]
test_summarise
PT V1
1  1
2  0
3  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...