замена значений столбца фрейма данных

#r

Вопрос:

я пытаюсь изменить значения в имени столбца с помощью VAN, игнорируя значения NA.

 df <- data.frame(Name = c("ABC","VAN","KLA","DCA",  "GOL",NA,   "MNA",NA,   "VAN","BAN",NA,"MHA",NA,"KLA"))


df <- df %>% mutate(Name=replace(.,!is.na(Name),"VAN"))

 

Комментарии:

1. Вам нужно df %>% mutate(Name=replace(Name,!is.na(Name),"VAN")) . то есть заменить . на Name

2. да , это работает, спасибо

Ответ №1:

Проблема в том, что ОП используется . и . относится ко всему набору данных. Нам просто нужно указать имя столбца «Имя»

 library(dplyr)
df <- df %>% 
   mutate(Name=replace(Name,!is.na(Name),"VAN"))
 

-выход

 df
 Name
1   VAN
2   VAN
3   VAN
4   VAN
5   VAN
6  <NA>
7   VAN
8  <NA>
9   VAN
10  VAN
11 <NA>
12  VAN
13 <NA>
14  VAN
 

Если столбцов несколько, выполните это с across помощью цикла по столбцам

 df <- df %>%
        mutate(across(everything(), ~ replace(., !is.na(.), "VAN")))
 

Здесь everything() подразумеваются все столбцы набора данных

Ответ №2:

 library(tidyverse)
library(stringr)


df <- data.frame(Name = c("ABC","VAN","KLA","DCA",  "GOL",NA,   "MNA",NA,   "VAN","BAN",NA,"MHA",NA,"KLA"))

head(df)
#>   Name
#> 1  ABC
#> 2  VAN
#> 3  KLA
#> 4  DCA
#> 5  GOL
#> 6 <NA>

mutate(df, Name = str_replace(Name, "^.*$", 'VAN'))
#>    Name
#> 1   VAN
#> 2   VAN
#> 3   VAN
#> 4   VAN
#> 5   VAN
#> 6  <NA>
#> 7   VAN
#> 8  <NA>
#> 9   VAN
#> 10  VAN
#> 11 <NA>
#> 12  VAN
#> 13 <NA>
#> 14  VAN
 

Создано 2021-06-07 пакетом reprex (v2.0.0)

Ответ №3:

Вы можете использовать [<- для присвоения значения, которого Name нет NA .

 df$Name[!is.na(df$Name)] <- 'VAN'
df
#   Name
#1   VAN
#2   VAN
#3   VAN
#4   VAN
#5   VAN
#6  <NA>
#7   VAN
#8  <NA>
#9   VAN
#10  VAN
#11 <NA>
#12  VAN
#13 <NA>
#14  VAN