Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Using NA in an If/Then statement

I want to create a new column called Egg_Number. If the row (every row is a specific nest) has no NA values then there are three eggs in the nest. If the row has an NA value for length_3, then there are two eggs. If the row has an NA value in length_3 AND length_2, then there is only 1 egg in the nest. I’m trying to figure out how to add this column and my only idea was using an if/else statement.

Something like so:

if (NIUS2021.ALL$length_3 = NA) { 
NIUS2021.ALL$Egg_Number = 2 }
else if (NIUS2021.ALL$length_3 = NA AND NIUS2021.ALL$length_2 = NA) {
NIUS2021.ALL$Egg_Number = 1 }
else {NIUS2021$.ALLEgg_Number = 3}

Here is my data set I’m using

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

> dput(head(NIUS2021.ALL))
structure(list(Niu = structure(1:6, .Label = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
"16", "17", "18", "19", "21", "22", "23", "25", "26", "27", "28", 
"29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", 
"40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", 
"51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", 
"62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", 
"73", "74", "75", "76", "906", "910", "915", "916", "917", "919", 
"920", "922", "924", "927", "928", "930", "931", "950", "951", 
"952", "953", "954", "955", "956", "957", "958", "959", "963"
), class = "factor"), totalV = c(183.1311069223, 189.09433326461, 
196.39045370996, 181.282560178575, 115.67490871467, 172.752941083985
), averageV = c(61.0437023074333, 63.0314444215367, 65.4634845699867, 
60.427520059525, 57.837454357335, 57.5843136946617), volume_1 = c(62.57592810342, 
67.75331569111, 71.51507045914, 62.28569026831, 58.639530945905, 
59.458291114465), volume_2 = c(60.45794961088, 64.6494663195, 
62.626512390435, 62.029110556805, 57.035377768765, 58.42423975
), volume_3 = c(60.097229208, 56.691551254, 62.248870860385, 
56.96775935346, NA, 54.87041021952), length_1 = c(67.07, 66.86, 
66.44, 64.94, 68.77, 63.41), length_2 = c(62.78, 63.27, 65.59, 
63.13, 62.81, 65.15), length_3 = c(68.28, 62.75, 63.41, 67.29, 
NA, 61.53), width_1 = c(43.86, 45.71, 47.11, 44.47, 41.93, 43.97
), width_2 = c(44.56, 45.9, 44.37, 45.01, 43.27, 43), width_3 = c(42.6, 
43.16, 44.99, 41.78, NA, 42.88)), class = c("grouped_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -6L), groups = structure(list(
    Niu = structure(1:6, .Label = c("1", "2", "3", "4", "5", 
    "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", 
    "17", "18", "19", "21", "22", "23", "25", "26", "27", "28", 
    "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", 
    "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", 
    "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", 
    "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", 
    "69", "70", "71", "72", "73", "74", "75", "76", "906", "910", 
    "915", "916", "917", "919", "920", "922", "924", "927", "928", 
    "930", "931", "950", "951", "952", "953", "954", "955", "956", 
    "957", "958", "959", "963"), class = "factor"), .rows = structure(list(
        1L, 2L, 3L, 4L, 5L, 6L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -6L), .drop = TRUE))

Thank you for the help!

>Solution :

You may try

library(dplyr)

NIUS2021 %>%
  mutate(Egg_number = case_when(
    !is.na(length_1 * length_2 * length_3) ~ 3,
    is.na(length_3) & is.na(length_2) ~ 1,
    is.na(length_3) ~ 2,
    T ~ NA_real_
  ))

some of data

  Niu   length_1 length_2 length_3 Egg_number     key
  <fct>    <dbl>    <dbl>    <dbl>      <dbl>   <dbl>
1 1         67.1     62.8     68.3          3 282409.
2 2         66.9     63.3     62.8          3 282833.
3 3         66.4     65.6     63.4          3 289532.
4 4         64.9     63.1     67.3          3 266232.
5 5         68.8     62.8     NA            2 297048.
6 6         63.4     65.2     61.5          3 261957.
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading