| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- suppressMessages(library(dplyr))
- WD <- getwd()
- specify_decimal <- function(x, k) format(round(x, k), nsmall=k)
- CSV <- file.choose()
- CSV <- read.csv(CSV)
- # CONVERT
- DATA <- NULL
- for(i in 1:(nrow(CSV) / 3)) {
- #if(i < 215 || i > 240) next
- x <- NULL
- y <- NULL
- z <- NULL
- if(i > 1) { i <- i * 3 - 2 }
- x <- CSV[i,]
- y <- CSV[i+1,]
- z <- CSV[i+2,]
- #print(i)
- cnv_ <- merge(x, y, all = TRUE, suffixes = c(".x", ".y"), by = "Time")
- cnv_ <- merge(cnv_, z, all = TRUE, suffixes = c("", ".z"), by = "Time")
- if(i == 1) {
- #print("CREATE")
- DATA <- cnv_
- }
- else {
- #print("BIND")
- DATA <- bind_rows(DATA, cnv_)
- }
- }
- DATA$state = "UNKNOWN"
- remove(x)
- remove(y)
- remove(z)
- remove(cnv_)
- headDF <- select(DATA, Time, Head.y)
- headDF$IndexTime <- 1:nrow(headDF)
- lowpoints <- subset(headDF, headDF$Head.y <= 0.0)
- lowpoints <- diff(as.matrix(lowpoints))
- lowpoints <- as.data.frame(lowpoints)
- calcIndexTime <- max(lowpoints$IndexTime)
- #GET SMALLEST VALUE OF HEAD HIGHT
- # GRAPH IS ALWAYS => SITTING, GET_UP, WALKING, GET_DOWN, SITTING
- min_ <- min(DATA$Head.y)
- norm_ <- 0
- sitting1 <- c()
- get_up <- c()
- walking <- c()
- get_down <- c()
- sitting2 <- c()
- cur_state <- ""
- cur_count <- 0
- prev_state <- ""
- prev_count <- 0
- deep_state <- ""
- deep_count <- 0
- row_count <- 0
- plot(DATA$Head.y,
- type = "l",
- ylab = "Hoogte hoofd"
- )
- for(i in 2:nrow(DATA)){
- offset <- DATA[i-1,]
- diff = offset$Head.y - DATA[i,]$Head.y
- color <- "black"
- if(diff < -0.013){
- DATA[i,]$state = "GET_UP"
- color <- "red"
- }
- else if(diff > 0.013){
- DATA[i,]$state = "GET_DOWN"
- color <- "red"
- }
- else if(DATA[i,]$Head.y - min_ > 0.15){
- DATA[i,]$state = "WALKING"
- color <- "blue"
- }
- else{
- DATA[i,]$state = "SITTING"
- color <- "green"
- }
- prox <- 8
- if(cur_state == DATA[i,]$state && i != nrow(DATA)){
- cur_count <- cur_count+1
- row_count <- row_count+1
- if(cur_count > prox){
- prev_state <- cur_state
- prev_count <- cur_count
- deep_count <- 0
- deep_state <- cur_state
- }
- }
- else if(DATA[i,]$state == deep_state){
- cur_state <- DATA[i,]$state
- #cur_count <- deep_count+1
- }
- else if(i == nrow(DATA)){
- sitting2 <- c(i-deep_count, i-1)
- }
- else{
- if(prev_count == row_count){
- cur_count <- cur_count+1
- }
- else if(deep_state == "WALKING" && row_count > 3){
- cur_count <- cur_count+2
- }
- else if(deep_state == ""){
- deep_state = DATA[i,]$state
- }
- else if(cur_count < prox){
- cur_count <- cur_count+1
- }
- else if(prev_count <= prox){
- deep_count <- deep_count + 1
- prev_state <- deep_state
- prev_count <- deep_count
- cur_state <- prev_state
- cur_count <- cur_count+1
- }
- else if (prev_count > prox ){
- deep_count <- cur_count + 1
- #deep_state <- prev_state
- vct <- c(i-deep_count, i-1)
- points(i-deep_count, 0, col = "black")
- if(deep_state == "SITTING" && i < nrow(DATA) / 2){
- sitting1 <- vct
- }
- else if(deep_state == "SITTING"){
- sitting2 <- vct
- }
- else if(deep_state == "GET_UP"){
- get_up <- vct
- }
- else if(deep_state == "WALKING"){
- walking <- c(walking, vct)
- }
- else if(deep_state == "GET_DOWN"){
- get_down <- vct
- }
- #print(deep_state)
- #print(vct)
- deep_count <- 0
- #deep_state <- ""
- #prev_count <- 0
- cur_count <- 1
- prev_count <- 1
- row_count <- 1
- cur_state <- DATA[i,]$state
- }
- cur_state <- DATA[i,]$state
- row_count <- 1
- }
- points(i, DATA[i,]$Head.y, col = color)
- }
|