Guest User

Untitled

a guest
Nov 21st, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. df_wide <- data.frame(
  2. ID = rep(1:2, each=10),
  3. JN = rep(1:2, each=5),
  4. Frame = rep(1:5, 4),
  5. System = rep(1:2, 10),
  6. RKX = rep(1:10+rnorm(10,mean=1,sd=0.5),2),
  7. RKY = rep(1:10+rnorm(10,mean=1,sd=0.5),2),
  8. RKZ = rep(1:10+rnorm(10,mean=1,sd=0.5), 2),
  9. LHeX = rep(1:10-rnorm(10,mean=1,sd=0.5),2),
  10. LHeY = rep(1:10-rnorm(10,mean=1,sd=0.5),2),
  11. LHeZ = rep(1:10-rnorm(10,mean=1,sd=0.5),2))
  12.  
  13. head(df_wide, 2)
  14. ID JN Frame System RKX RKY RKZ LHeX LHeY LHeZ
  15. 1 1 1 1 1 1.332827 2.068720 2.295742 -0.02336031 -0.3011227 -1.212326
  16. 2 1 1 2 2 3.570076 3.306799 3.136177 2.08828231 1.9226740 2.106496
  17.  
  18. ID JN Frame System joint X Y Z
  19. 1 1 1 1 1 RK 1.440103 2.221676 1.621871
  20. 2 1 1 1 1 LHe 3.537940 3.060948 2.856955
  21.  
  22. df_3D <- df_wide %>%
  23. gather(keys, values, -ID, -JN, -Frame, -System)%>%
  24. extract(keys, c("X", "Y", "Z", "joint"), "(X$) (Y$) (Z$) ([A-Z].$)")%>%
  25. spread(X, values)
  26.  
  27. df_wide %>%
  28. gather(keys, values, -ID, -JN, -Frame, -System) %>%
  29. extract(keys, c("Joint", "Coord"), "(.*)(X|Y|Z)$") %>%
  30. spread(Coord, values)
  31.  
  32. ID JN Frame System Joint X Y Z
  33. 1 1 1 1 1 LHe 0.1344259 -0.2927277 0.05375166
  34. 2 1 1 1 1 RK 1.8083539 2.4053498 2.32899399
  35. 3 1 1 2 2 LHe 1.1777492 1.1780538 0.96549849
  36. 4 1 1 2 2 RK 3.2254236 2.4100235 2.79816371
  37.  
  38. library(tidyr)
  39. library(stringr)
  40.  
  41. df2 <- df_wide %>%
  42. # leave the other columns
  43. gather( jointid, position, -ID, -JN, -Frame, -System ) %>%
  44. # insert a seperator to make it easier to split the X/Y/Z from the joint name
  45. mutate(jointid = str_replace( jointid, "X|Y|Z", ";\0")) %>%
  46. # split the joint name and the dimension apart
  47. tidyr::separate(jointid, c('joint', 'dim'), sep = ";" ) %>%
  48. # spread the joint and position apart into 3 columns
  49. spread(dim, position)
Add Comment
Please, Sign In to add comment