user3585829
user3585829

Reputation: 965

Changing NA to a Different Factor in R

I have a column in my dataset that is a of factor values. Here is an example dataset:

a <- c(1,4,6,3,8)
b <- c("No","Yes","NA", "Maybe", "Yes")
df <- data.frame(a,b)

I'd like to change the NA in column 2 ("b") to "Sometimes". I have tried two different approaches that, in my mind, should work but don't seem to give me the correct output:

df[is.na(df$b)] <- "Sometimes"
df[df$b == "NA"] <- "Sometimes"

Is there a way to do this?

Upvotes: 0

Views: 109

Answers (1)

fishtank
fishtank

Reputation: 3728

If you are using "NA" (i.e. character string), then the following will change it to a different factor "Sometimes"

> df <- data.frame(a,b)
> levels(df$b)
[1] "Maybe" "NA"    "No"    "Yes"
> levels(df$b)[levels(df$b)=="NA"]
[1] "NA"
> levels(df$b)[levels(df$b)=="NA"]<-"Sometimes"
> df$b
[1] No        Yes       Sometimes Maybe     Yes  
Levels: Maybe Sometimes No Yes
> df
  a         b
1 1        No
2 4       Yes
3 6 Sometimes
4 3     Maybe
5 8       Yes

Otherwise, if you had use NA, this will add Sometimes as a new factor and use is.na to change it:

b <- c("No","Yes",NA, "Maybe", "Yes")
df<-data.frame(a,b)
levels(df$b)<-c(levels(df$b),"Sometimes") # introduce a new factor
df[is.na(df$b),"b"]<-"Sometimes"

> df
  a         b
1 1        No
2 4       Yes
3 6 Sometimes
4 3     Maybe
5 8       Yes

Upvotes: 1

Related Questions