Объект внутри функции карты не распознан - PullRequest
1 голос
/ 09 апреля 2020

У меня есть вложенный фрейм данных, и я хотел бы получить номера строк, которые не являются NA для каждого столбца в дочернем фрейме данных, следующим образом (упрощенная версия):

df <- list(
  tibble(a=c(1, 2, NA_real_, 4, 5), b=c(2, NA_real_, 5, NA_real_, 3)),
  tibble(a=c(NA_real_, 2, 3, NA_real_, 5), b=c(NA_real_, NA_real_, NA_real_, 1, 3))
) %>%
  tibble(x=1:2, y=.)

res <- df %>%
  mutate(z=map(y, function(dat){
    c(a="a", b="b") %>% map_int(function(col){
      dat %>% filter(!is.na(!!sym(col))) %>% nrow()
    }) %>% enframe()
  }))

Когда я запускаю код Я получаю сообщение об ошибке: Error: Only strings can be converted to symbols. Кажется, что col внутри функции не распознается.
Почему происходит такое поведение?

1 Ответ

0 голосов
/ 09 апреля 2020

Если ваши данные называются df, вы можете сделать:

library(dplyr)
library(purrr)

df1 <- df %>% mutate(res = map(y, ~.x %>% summarise_all(~sum(!is.na(.)))))

df1$res
#[[1]]
# A tibble: 1 x 2
#      a     b
#  <int> <int>
#1     4     3

#[[2]]
# A tibble: 1 x 2
#      a     b
#  <int> <int>
#1     3     2

Или использовать базу R:

sapply(df$y, function(x) colSums(!is.na(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...