#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