Reputation: 965
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
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