First, let’s create a dataset.
df= data.frame(location= rep(c("Illinois", "Iowa"), each = 12), fertilizer= rep(c("A", "A", "A", "B", "B", "B", "C", "C", "C", "D", "D", "D"), times = 2), block= rep(c("I", "II", "II"), times = 8), yield= c('100', '99', '98', '125', "NA", '135', '140', '138', '128', '80', '87', '76', '130', "NA", '140', '145', '148', '152', "#DIV/0!", '158', '165', '80', '78', "NA"), yield1= c(100, 99, 98, 125, NA, 135, 140, 138, 128, 80, 87, 76, 130, NA, 140, 145, 148, 152, NA, 158, 165, 80, 78, NA))
print(df) location fertilizer block yield yield1 1 Illinois A I 100 100 2 Illinois A II 99 99 3 Illinois A II 98 98 4 Illinois B I 125 125 5 Illinois B II NA NA 6 Illinois B II 135 135 7 Illinois C I 140 140 8 Illinois C II 138 138 9 Illinois C II 128 128 10 Illinois D I 80 80 11 Illinois D II 87 87 12 Illinois D II 76 76 13 Iowa A I 130 130 14 Iowa A II NA NA 15 Iowa A II 140 140 16 Iowa B I 145 145 17 Iowa B II 148 148 18 Iowa B II 152 152 19 Iowa C I #DIV/0! NA 20 Iowa C II 158 158 21 Iowa C II 165 165 22 Iowa D I 80 80 23 Iowa D II 78 78 24 Iowa D II NA NA
and observe the different data formats of each value.
str(df) 'data.frame': 24 obs. of 5 variables: $ location : chr "Illinois" "Illinois" "Illinois" "Illinois" ... $ fertilizer: chr "A" "A" "A" "B" ... $ block : chr "I" "II" "II" "I" ... $ yield : chr "100" "99" "98" "125" ... $ yield1 : num 100 99 98 125 NA 135 140 138 128 80 ...
I have two sets of yield data: one in character format (yield column) and the other in numeric format (yield1 column).

How to convert missing value to 0 when data is numeric?
When data is numeric (yield1 column), and if there are missing values, how can we replace it to 0?
if(!require(dplyr)) install.packages("dplyr")
library(dplyr)
dataA= df %>%
dplyr::mutate(yield_corrected= if_else(is.na(yield1), 0, as.numeric(yield1)))
print(dataA) location fertilizer block yield yield1 yield_corrected 1 Illinois A I 100 100 100 2 Illinois A II 99 99 99 3 Illinois A II 98 98 98 4 Illinois B I 125 125 125 5 Illinois B II NA NA 0 6 Illinois B II 135 135 135 7 Illinois C I 140 140 140 8 Illinois C II 138 138 138 9 Illinois C II 128 128 128 10 Illinois D I 80 80 80 11 Illinois D II 87 87 87 12 Illinois D II 76 76 76 13 Iowa A I 130 130 130 14 Iowa A II NA NA 0 15 Iowa A II 140 140 140 16 Iowa B I 145 145 145 17 Iowa B II 148 148 148 18 Iowa B II 152 152 152 19 Iowa C I #DIV/0! NA 0 20 Iowa C II 158 158 158 21 Iowa C II 165 165 165 22 Iowa D I 80 80 80 23 Iowa D II 78 78 78 24 Iowa D II NA NA 0
or you can also use the following code.
if(!require(dplyr)) install.packages("dplyr")
library(dplyr)
dataA1 = df %>%
dplyr::mutate(yield1=coalesce(yield1, 0))
full code: https://github.com/agronomy4future/r_code/blob/main/Converting_Character_Values_to_Numeric_in_R_A_How_To_Guide.ipynb

© 2022 – 2023 https://agronomy4future.com