С учетом кадра данных гравитации:
df <- structure(list(user_id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), obs_id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), scroll_id = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), gra_x = c(-0.76694775, -0.7770001,
-0.7770001, -0.7770001, -0.7864253, -0.7864253, -0.7864253, -0.7864253,
-0.7947834, -0.80270606), gra_y = c(7.083949, 7.0901933, 7.0901933,
7.0901933, 7.096873, 7.096873, 7.096873, 7.096873, 7.1042953,
7.1121664), gra_z = c(6.737941, 6.730217, 6.730217, 6.730217,
6.722077, 6.722077, 6.722077, 6.722077, 6.713248, 6.7039647)), .Names = c("user_id",
"obs_id", "scroll_id", "gra_x", "gra_y", "gra_z"), row.names = c(NA,
-10L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), vars = c("user_id",
"obs_id", "scroll_id"), drop = TRUE, indices = list(0:9), group_sizes = 10L, biggest_group_size = 10L, labels = structure(list(
user_id = 1L, obs_id = 1L, scroll_id = 1L), row.names = c(NA,
-1L), class = "data.frame", vars = c("user_id", "obs_id", "scroll_id"
), drop = TRUE, .Names = c("user_id", "obs_id", "scroll_id")))
Я хочу вычислить угол между каждыми 2 векторами (gra_x, gra_y, gra_z)
, используя:
angle <- function(x,y){
dot.prod <- x%*%y
norm.x <- norm(x,type="2")
norm.y <- norm(y,type="2")
theta <- acos(dot.prod / (norm.x * norm.y))
as.numeric(theta)
}
Я пыталсяиспользовать:
df %>%
select(gra_x, gra_y, gra_z) %>%
mutate(theta = angle(c(gra_x, gra_y, gra_z), c(lead(gra_x), lead(gra_y), lead(gra_z))))
Но он возвращает ошибку.Посоветуйте, пожалуйста, как рассчитать угол между каждыми 2 рядами?