Group_by, транспонировать, мутировать, махаланобис - PullRequest
0 голосов
/ 16 января 2020

Я изо всех сил стараюсь выполнить несколько задач в тидирной среде. Сначала я хотел бы сгруппировать несколько переменных в фрейме данных, затем создать матрицу из этого фрейма и, наконец, создать новую переменную с измерением расстояния (Mahalanobis) на матрице.

Некоторые примеры данных:

head(olddf) 

##           person    place  thing     measurement1    measurement2
## 1   JohnSmith       Paris     a      3.2             4.4
## 2     JaneDoe       Paris     b      4.4             4.4
## 3 MaryJohnson      London     e      4.2             4.2
## 4   JohnSmith      London     d      4.1             3.9
## 5     JaneDoe       Tokyo     e      3.9             3.9
## 6 MaryJohnson       Tokyo     e      3.2             3.9

newdf <- olddf %>%
  group_by(person, place, thing) %>%
  m = data.matrix(???) %>%  # what do I provide here? how to convert the data subset to a matrix? %>%
  cov = var(m) %>%
  mutate(dist=mahalanobis(m, cov))

1 Ответ

0 голосов
/ 16 января 2020

Может быть лучше сделать групповое разделение

library(dplyr)
library(purrr)
olddf %>%
   group_split(person, place, thing, keep = FALSE) %>%
   map(~ {m <- data.matrix(.x)  
          mahalanobis(m, center = FALSE, cov = var(m))
          }) %>%
   unlist %>%
   mutate(olddf, dist = .)
...