Reputation: 45
I have a data set like this:
dt <- tibble(
TRIAL = c("M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1"),
PLOT= c(1, 2, 3, 1, 6, 3, 2, 3, 1,67,34),
trait = c("ASI", "ASI", "ASI", "ASI", "ASI", "CUR", "CUR", "CUR", "CUR", "CUR", "CUR"),
trialValue = c(2, 2, 2, 2, 2, , , , , ,)
)
# # A tibble: 11 x 4
# TRIAL PLOT trait trialValue
<chr> <dbl> <chr> <dbl
#1 M20-01RND1 1 ASI 2
#2 M20-01RND1 2 ASI 2
#3 M20-01RND1 3 ASI 2
#4 M20-01RND1 1 ASI 2
#5 M20-01RND1 6 ASI
#6 M20-01RND1 3 CUR
#7 M20-01RND1 2 CUR
#8 M20-01RND1 3 CUR
#9 M20-01RND1 1 CUR
#10 M20-01RND1 67 CUR
#11 M20-01RND1 34 CUR
This is what I want to achieve:I want a new column data_qc_code to be mutated if the required conditions are met. i.e trait = "ASI" & traitValue = 2 give "A", and when traitValue is empty then give "M"
# # A tibble: 11 x 4
# TRIAL PLOT trait trialValue data_qc_code
<chr> <dbl> <chr> <dbl <chr>
#1 M20-01RND1 1 ASI 2 Q
#2 M20-01RND1 2 ASI 2 Q
#3 M20-01RND1 3 ASI 2 Q
#4 M20-01RND1 1 ASI 2 Q
#5 M20-01RND1 6 ASI M
#6 M20-01RND1 3 CUR M
#7 M20-01RND1 2 CUR M
#8 M20-01RND1 3 CUR M
#9 M20-01RND1 1 CUR M
#10 M20-01RND1 67 CUR M
#11 M20-01RND1 34 CUR M
When I run this code I get not the expected output
df %>%
mutate(data_qc_code = case_when(
trait == "ASI" & traitValue == 2 ~ "A",
traitValue == "" ~ "M"))->df1
This was my output
# # A tibble: 11 x 4
# TRIAL PLOT trait trialValue data_qc_code
<chr> <dbl> <chr> <dbl <chr>
#1 M20-01RND1 1 ASI 2 Q
#2 M20-01RND1 2 ASI 2 Q
#3 M20-01RND1 3 ASI 2 Q
#4 M20-01RND1 1 ASI 2 Q
#5 M20-01RND1 6 ASI
#6 M20-01RND1 3 CUR
#7 M20-01RND1 2 CUR
#8 M20-01RND1 3 CUR
#9 M20-01RND1 1 CUR
#10 M20-01RND1 67 CUR
#11 M20-01RND1 34 CUR
Kindly help out please. Thank you.
Upvotes: 0
Views: 38
Reputation: 19097
Note that in R
, missing value is represented by NA
. Therefore I changed your input a little bit to avoid errors and to include NA
.
Note that in your question, you said you want to fill the first criteria with "A", but in your codes, it's "Q". Therefore I also used "Q" in my code.
library(tidyverse)
dt <- tibble(
TRIAL = c("M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1", "M20-01RND1"),
PLOT= c(1, 2, 3, 1, 6, 3, 2, 3, 1,67,34),
trait = c("ASI", "ASI", "ASI", "ASI", "ASI", "CUR", "CUR", "CUR", "CUR", "CUR", "CUR"),
trialValue = c(2, 2, 2, 2, 2, NA, NA, NA, NA, NA, NA)
)
dt %>% mutate(data_qc_code = ifelse(trait == "ASI" & trialValue == 2, "Q", "M"))
# A tibble: 11 x 5
TRIAL PLOT trait trialValue data_qc_code
<chr> <dbl> <chr> <dbl> <chr>
1 M20-01RND1 1 ASI 2 Q
2 M20-01RND1 2 ASI 2 Q
3 M20-01RND1 3 ASI 2 Q
4 M20-01RND1 1 ASI 2 Q
5 M20-01RND1 6 ASI 2 Q
6 M20-01RND1 3 CUR NA M
7 M20-01RND1 2 CUR NA M
8 M20-01RND1 3 CUR NA M
9 M20-01RND1 1 CUR NA M
10 M20-01RND1 67 CUR NA M
11 M20-01RND1 34 CUR NA M
Upvotes: 1