tidyverse - удалить столбец внутри вложенного столбца / списка - PullRequest
1 голос
/ 17 февраля 2020

У меня есть следующие данные:

(Примечание: я использую текущую версию dplyr для github в tidyverse, которая предлагает некоторые новые экспериментальные функции, такие как condense - которые я использую ниже, но Я думаю, что это не относится к моей проблеме / вопросу).

library(tidyverse)
library(corrr)

dat <- data.frame(grp = rep(1:4, each = 25),
                  Q1 = sample(c(1:5, NA), 100, replace = TRUE),
                  Q2 = sample(c(1:5, NA), 100, replace = TRUE),
                  Q3 = sample(c(1:5, NA), 100, replace = TRUE),
                  Q4 = sample(c(1:5, NA), 100, replace = TRUE),
                  Q5 = sample(c(1:5, NA), 100, replace = TRUE),
                  Q6 = sample(c(1:5, NA), 100, replace = TRUE))

Теперь я хочу вычислить корреляцию между Q1 и Q6 в каждой группе, и я использую:

cor_dat <- dat %>%
  group_by(grp) %>%
  condense(cor = correlate(cur_data()))

Что дает мне корреляции в виде списка-столбца (?). В каждом списке первый столбец называется rowname, и я хочу просто удалить этот столбец из каждого списка в обратном порядке. Как я могу это сделать?

Я уже пробовал что-то наивное, как select (-rowname), но это не работает.

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Предложение @ r2evans сработает, если мы удалим атрибут группы

library(dplyr)
library(purrr)
cor_dat %>%
     ungroup %>%
     mutate(cor = map(cor, ~ select(.x, -rowname)))
# A tibble: 4 x 2
#    grp cor             
#  <int> <list>          
#1     1 <tibble [6 × 6]>
#2     2 <tibble [6 × 6]>
#3     3 <tibble [6 × 6]>
#4     4 <tibble [6 × 6]>

При наличии атрибута группы это приведет к ошибке

cor_dat %>% 
    mutate(cor = map(cor, ~ select(.x, -rowname)))   

Ошибка: mutate() аргумент cor с ошибкой. 101 cor - это map(cor, ~select(.x, -rowname)). occ Ошибка произошла в строке 1. ✖ Не применимо никакого метода для 'select_', примененного к объекту класса "персонаж". Выполните rlang::last_error(), чтобы увидеть, где произошла ошибка.

, что соответствует то же самое поведение, если мы извлекаем в виде столбца

cor_dat$cor %>% 
           map(~ .x %>% select(-rowname))

или если мы хотим сделать его короче, это можно сделать внутри самого condense, поскольку correlate добавляет столбец rowname согласно документация

dat %>%
  group_by(grp) %>%
  condense(cor = correlate(cur_data()) %>%
                              select(-rowname))
# A tibble: 4 x 2
# Rowwise:  grp
#    grp cor             
#  <int> <list>          
#1     1 <tibble [6 × 6]>
#2     2 <tibble [6 × 6]>
#3     3 <tibble [6 × 6]>
#4     4 <tibble [6 × 6]>
0 голосов
/ 17 февраля 2020

О боже, это было так просто, как:

cor_dat <- dat %>%
  group_by(grp) %>%
  condense(cor = correlate(cur_data())) %>%
  mutate(cor = list(cor[,-1]))

Получил методом проб и ошибок. Хотя это работает только с позициями в столбцах, а не с именами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...