Как сравнить несколько указанных c столбцов в R - PullRequest
1 голос
/ 29 марта 2020

Я не очень опытен с , любая помощь приветствуется. У меня есть набор данных, который выглядит следующим образом:

df <- tibble(
a = rnorm(10),
b = rnorm(10),
c = rnorm(10),
d = rnorm(10),
Adam = rnorm(10),
Aaron = rnorm(10),
Abby = rnorm(10),
Brett= rnorm(10),
Bobby= rnorm(10),
Blaine= rnorm(10),
Cate= rnorm(10),
Camila= rnorm(10),
Calvin= rnorm(10),
Dana= rnorm(10),
Debbie= rnorm(10),
Derek= rnorm(10))

Я пытаюсь вычислить косинус между столбцом A и столбцами с именами A (Адам, Аарон, Эбби) и аналогично между столбец B и столбцы с именами B (Бретт, Бобби, Блейн) и др. c. Я пытался использовать map из пакета, но не могу понять это.

Заранее спасибо.

1 Ответ

3 голосов
/ 29 марта 2020

Мы можем разбить набор данных на list набор данных на основе первого символа имени столбца, затем l oop над list с map, сделать cosine_similarity (из tcR) пакет), между всеми столбцами и первым столбцом ('a', 'b', 'c', 'd' - в элементах list)

library(tcR)
library(dplyr)
library(purrr)
df %>% 
    split.default(toupper(substr(names(.), 1, 1)))   %>%
    map_dfc( ~ { nm1 <- names(.x)[1]
             .x %>%
                 summarise_at(-1, ~ cosine.similarity(!! rlang::sym(nm1), .))})
# A tibble: 1 x 12
#    Adam Aaron  Abby    Brett   Bobby  Blaine  Cate Camila Calvin  Dana  Debbie   Derek
#*   <dbl> <dbl> <dbl>    <dbl>   <dbl>   <dbl> <dbl>  <dbl>  <dbl> <dbl>   <dbl>   <dbl>
#1 -0.0444 0.110 0.356 -0.00975 -0.0277 -0.0297 0.270 -0.222 -0.364 0.172 -0.0108 -0.0498
...