Как заставить !is.na() работать с каналами в R?

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

df <- data.frame(c1=c(NA,NA,NA,NA,NA,NA,'Account','Liability','NA'),               c2=c('FY','Period','Category','Currency','Location','Entity','Product','Prod1','Prod2'),
                   c3=c('2022','Jan','Group','FX','Location','AUS','*1000',35,45),
                   c4=c(NA,NA,NA,NA,NA,'Brunei','*1000',20,56))

Когда я пытаюсь получить строки, которые являются NA в первом столбце, это работает

df %>% select(.,1) %>% is.na()

но если я хочу получить не-NA, то добавлю ! до того, как NA не сработает

df %>% select(.,1) %>% !is.na()

Я полагаю, это потому, что !is.na( сама по себе не является функцией.

Хотя !(df %>% select(.,1) %>% is.na()) дает мне результат, это не помогает мне добавлять больше каналов и операций. Может кто-нибудь, пожалуйста, скажите мне, есть ли способ обойти это?

Используйте фигурные скобки, чтобы запретить правило первого аргумента, например. {!is.na(.)}.

Ritchie Sacramento 17.11.2022 09:11

@RitchieSacramento благодаря тебе я сегодня узнал кое-что важное. Не знал о правиле первого аргумента

Din 17.11.2022 10:15

Этот пример был бы проще в базе R: !is.na(df[1])

G. Grothendieck 17.11.2022 14:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Одним из вариантов было бы разделить вашу операцию на два этапа, например, где вы должны обернуть ! обратными кавычками. Также обратите внимание, что при использовании select, который возвращает df, применение is.na() возвращает матрицу. Возможно, вы хотите pull?

library(dplyr, w = FALSE)

df %>% select(1) %>% is.na() %>% `!`
#>          c1
#>  [1,] FALSE
#>  [2,] FALSE
#>  [3,] FALSE
#>  [4,] FALSE
#>  [5,] FALSE
#>  [6,] FALSE
#>  [7,]  TRUE
#>  [8,]  TRUE
#>  [9,]  TRUE
df %>% pull(1) %>% is.na() %>% `!`
#> [1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE

И второй вариант — использовать purrr::negate вот так:

df %>% select(1) %>% purrr::negate(is.na)(.)
#>          c1
#>  [1,] FALSE
#>  [2,] FALSE
#>  [3,] FALSE
#>  [4,] FALSE
#>  [5,] FALSE
#>  [6,] FALSE
#>  [7,]  TRUE
#>  [8,]  TRUE
#>  [9,]  TRUE
df %>% pull(1) %>% purrr::negate(is.na)(.)
#> [1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE

Пожалуйста. Но, возможно, самым простым подходом было бы завернуть внутрь {}, как упоминал Ричи в своем комментарии.

stefan 17.11.2022 09:41

Другие вопросы по теме