Как изменить несколько переменных тиббла на одно и то же значение в R в nce

#r #across

Вопрос:

Я хочу изменить значения столбцов со 2 по 4 т. NA Я безуспешно пытался использовать mutate across .

 library(tidyverse)

df <- tibble(year = 2020, a = 1, b = 2, c = 3)


df %>% mutate(across(c(2:4), is.na))
#> # A tibble: 1 x 4
#>    year a     b     c    
#>   <dbl> <lgl> <lgl> <lgl>
#> 1  2020 FALSE FALSE FALSE

# But this gives an error because NA is not a function
# df %>% mutate(across(c(2:4), NA))
Created on 2021-10-30 by the reprex package (v2.0.1)
 

Ответ №1:

Используйте анонимную функцию или ~ .

 library(dplyr)

df %>% mutate(across(c(2:4), ~NA))

#   year a     b     c    
#  <dbl> <lgl> <lgl> <lgl>
#1  2020 NA    NA    NA   
 

В базе R вы можете сделать —

 df[2:4] <- NA
 

Ответ №2:

Если нам нужно, чтобы класс был таким же, как входные данные для каждого из столбцов, умножьте ( * ) на NA или иначе NA по умолчанию NA_logical_ , что может привести к конфликту позже, когда мы попытаемся изменить значения в этих столбцах

 library(dplyr)
df %>%
    mutate(across(2:4, `*`, NA))
# A tibble: 1 × 4
   year     a     b     c
  <dbl> <dbl> <dbl> <dbl>
1  2020    NA    NA    NA