main.R 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. suppressMessages(library(dplyr))
  2. WD <- getwd()
  3. specify_decimal <- function(x, k) format(round(x, k), nsmall=k)
  4. CSV <- file.choose()
  5. CSV <- read.csv(CSV)
  6. # CONVERT
  7. DATA <- NULL
  8. for(i in 1:(nrow(CSV) / 3)) {
  9. #if(i < 215 || i > 240) next
  10. x <- NULL
  11. y <- NULL
  12. z <- NULL
  13. if(i > 1) { i <- i * 3 - 2 }
  14. x <- CSV[i,]
  15. y <- CSV[i+1,]
  16. z <- CSV[i+2,]
  17. #print(i)
  18. cnv_ <- merge(x, y, all = TRUE, suffixes = c(".x", ".y"), by = "Time")
  19. cnv_ <- merge(cnv_, z, all = TRUE, suffixes = c("", ".z"), by = "Time")
  20. if(i == 1) {
  21. #print("CREATE")
  22. DATA <- cnv_
  23. }
  24. else {
  25. #print("BIND")
  26. DATA <- bind_rows(DATA, cnv_)
  27. }
  28. }
  29. DATA$state = "UNKNOWN"
  30. remove(x)
  31. remove(y)
  32. remove(z)
  33. remove(cnv_)
  34. headDF <- select(DATA, Time, Head.y)
  35. headDF$IndexTime <- 1:nrow(headDF)
  36. lowpoints <- subset(headDF, headDF$Head.y <= 0.0)
  37. lowpoints <- diff(as.matrix(lowpoints))
  38. lowpoints <- as.data.frame(lowpoints)
  39. calcIndexTime <- max(lowpoints$IndexTime)
  40. #GET SMALLEST VALUE OF HEAD HIGHT
  41. # GRAPH IS ALWAYS => SITTING, GET_UP, WALKING, GET_DOWN, SITTING
  42. min_ <- min(DATA$Head.y)
  43. norm_ <- 0
  44. sitting1 <- c()
  45. get_up <- c()
  46. walking <- c()
  47. get_down <- c()
  48. sitting2 <- c()
  49. cur_state <- ""
  50. cur_count <- 0
  51. prev_state <- ""
  52. prev_count <- 0
  53. deep_state <- ""
  54. deep_count <- 0
  55. row_count <- 0
  56. plot(DATA$Head.y,
  57. type = "l",
  58. ylab = "Hoogte hoofd"
  59. )
  60. for(i in 2:nrow(DATA)){
  61. offset <- DATA[i-1,]
  62. diff = offset$Head.y - DATA[i,]$Head.y
  63. color <- "black"
  64. if(diff < -0.013){
  65. DATA[i,]$state = "GET_UP"
  66. color <- "red"
  67. }
  68. else if(diff > 0.013){
  69. DATA[i,]$state = "GET_DOWN"
  70. color <- "red"
  71. }
  72. else if(DATA[i,]$Head.y - min_ > 0.15){
  73. DATA[i,]$state = "WALKING"
  74. color <- "blue"
  75. }
  76. else{
  77. DATA[i,]$state = "SITTING"
  78. color <- "green"
  79. }
  80. prox <- 8
  81. if(cur_state == DATA[i,]$state && i != nrow(DATA)){
  82. cur_count <- cur_count+1
  83. row_count <- row_count+1
  84. if(cur_count > prox){
  85. prev_state <- cur_state
  86. prev_count <- cur_count
  87. deep_count <- 0
  88. deep_state <- cur_state
  89. }
  90. }
  91. else if(DATA[i,]$state == deep_state){
  92. cur_state <- DATA[i,]$state
  93. #cur_count <- deep_count+1
  94. }
  95. else if(i == nrow(DATA)){
  96. sitting2 <- c(i-deep_count, i-1)
  97. }
  98. else{
  99. if(prev_count == row_count){
  100. cur_count <- cur_count+1
  101. }
  102. else if(deep_state == "WALKING" && row_count > 3){
  103. cur_count <- cur_count+2
  104. }
  105. else if(deep_state == ""){
  106. deep_state = DATA[i,]$state
  107. }
  108. else if(cur_count < prox){
  109. cur_count <- cur_count+1
  110. }
  111. else if(prev_count <= prox){
  112. deep_count <- deep_count + 1
  113. prev_state <- deep_state
  114. prev_count <- deep_count
  115. cur_state <- prev_state
  116. cur_count <- cur_count+1
  117. }
  118. else if (prev_count > prox ){
  119. deep_count <- cur_count + 1
  120. #deep_state <- prev_state
  121. vct <- c(i-deep_count, i-1)
  122. points(i-deep_count, 0, col = "black")
  123. if(deep_state == "SITTING" && i < nrow(DATA) / 2){
  124. sitting1 <- vct
  125. }
  126. else if(deep_state == "SITTING"){
  127. sitting2 <- vct
  128. }
  129. else if(deep_state == "GET_UP"){
  130. get_up <- vct
  131. }
  132. else if(deep_state == "WALKING"){
  133. walking <- c(walking, vct)
  134. }
  135. else if(deep_state == "GET_DOWN"){
  136. get_down <- vct
  137. }
  138. #print(deep_state)
  139. #print(vct)
  140. deep_count <- 0
  141. #deep_state <- ""
  142. #prev_count <- 0
  143. cur_count <- 1
  144. prev_count <- 1
  145. row_count <- 1
  146. cur_state <- DATA[i,]$state
  147. }
  148. cur_state <- DATA[i,]$state
  149. row_count <- 1
  150. }
  151. points(i, DATA[i,]$Head.y, col = color)
  152. }