I have a dataset something like this:
col_a col_b col_c 1 abc_boy 1 2 abc_boy 2 1 abc_girl 1 2 abc_girl 2
I need to pick up the first line only based on col_b and col_c , and then change the valye to col_c , something like this:
df[grep("_boy$",df[,"col_b"]) & df[,"col_c"]=="1","col_c"] <- "yes"
But the above code is not in order, since the first criteria and the second criterion do not come from the same set.
I can do it stupidly using an explicit loop or make a “two-level” subset, something like this:
df.a <- df[grep("_boy$",df[,"col_b"]),] #1 df.b <- df[grep("_boy$",df[,"col_b"],invert=TRUE),] #2 df.a <- df.a[df.a[,"col_c"]=="1","col_c"] <- "yes" #3 df.a <- df.a[df.a[,"col_c"]=="2","col_c"] <- "no" #4 df <- rbind(df.a,df.b) #5
But I prefer not to do this, can someone enlighten me how to "merge" #1 and #3 ? Thanks.
source share