Вот код, который считывает данные с удаленного URL, а затем находит строки, которые NA
для всех столбцов в пяти различных подмножествах столбцов. Таблица вывода miss_recode
дает ID
для этих строк вместе с переменной recode_cols
, которая является меткой для какое подмножество строк - это все NA
.
suppressMessages(library(tidyverse))
urlRemote_path <- "https://raw.githubusercontent.com/"
github_path <- "DSHerzberg/TOD-R/master/INPUT-FILES/"
fileName_path <- "SO-data.csv"
input <- suppressMessages(read_csv(url(
str_c(urlRemote_path, github_path, fileName_path)
)))
miss1 <- input %>%
filter(across(c(i001:i035),
~ is.na(.))) %>%
mutate(recode_cols = "i001:i035")
miss2 <- input %>%
filter(across(c(i036:i060),
~ is.na(.))) %>%
mutate(recode_cols = "i036:i060")
miss3 <- input %>%
filter(across(c(i061:i100),
~ is.na(.))) %>%
mutate(recode_cols = "i061:i100")
miss4 <- input %>%
filter(across(c(i101:i130),
~ is.na(.))) %>%
mutate(recode_cols = "i101:i130")
miss5 <- input %>%
filter(across(c(i131:i165),
~ is.na(.))) %>%
mutate(recode_cols = "i131:i165")
miss_recode <- bind_rows(
miss1,
miss2,
miss3,
miss4,
miss5
) %>%
select(ID, recode_cols)
Я хочу объединить код с purrr::map
. В следующем фрагменте показаны мои попытка, но возвращает Error: Can't subset columns that don't exist.
vec <- c("i001:i035", "i036:i060", "i061:i100", "i101:i130", "i131:i165")
miss_recode_map <- vec %>%
map_df(~
input %>%
filter(across(c(!!sym(.x)),
~ is.na(.))) %>%
mutate(recode_cols = .x) %>%
select(ID, recode_cols)
)
Ясно, что я неправильно понимаю NSE
. Это похоже на новый вопрос относится к across()
, который теперь доступен в dplyr
1.0.0. В этом например, кажется, что одно использование .x
требует, чтобы элементы vec
были цитируется, а другое использование .x
требует, чтобы эти элементы не заключались в кавычки.
Заранее благодарю за любую помощь.
1 ответ
Вы не можете преобразовать "i001:i035"
как символ, вам действительно нужно его проанализировать.
library(dplyr)
library(rlang)
purrr::map_df(vec, ~input %>%
filter(across(!!parse_expr(.x),~ is.na(.))) %>%
mutate(recode_cols = .x) %>%
select(ID, recode_cols))
# A tibble: 8 x 2
# ID recode_cols
# <dbl> <chr>
#1 201010 i036:i060
#2 214063 i036:i060
#3 262050 i036:i060
#4 262063 i036:i060
#5 205036 i061:i100
#6 231007 i061:i100
#7 208014 i101:i130
#8 231014 i131:i165
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.