简体   繁体   中英

Check if column data exists in column and return value of the another column in R

I want to check if values from column B exist in column A, and if yes and equal with the value in that row, create another column D, getting the value from column C (for the A on that row).

A B C D
a f 12 55
b a 23 12
c b 33 23
d c 1 33
e e 11 11
f d 55 1

This is what I have, but it's not working as it should as it is setting the value of D by just checking if the value exists in column A and not comparing them.

  ifelse(df$B %in% df$A, df$C , NA)

Use match . By default, if there is no match, it returns NA , indexing on NA returns NA for 'C' as well

df1$D <-  with(df1, C[match(B, A)])

-output

> df1
  A B  C  D
1 a f 12 55
2 b a 23 12
3 c b 33 23
4 d c  1 33
5 e e 11 11
6 f d 55  1

data

df1 <- structure(list(A = c("a", "b", "c", "d", "e", "f"), B = c("f", 
"a", "b", "c", "e", "d"), C = c(12L, 23L, 33L, 1L, 11L, 55L), 
    D = c(55L, 12L, 23L, 33L, 11L, 1L)), class = "data.frame", row.names = c(NA, 
-6L))

You could also do:

transform(df1, D = setNames(C,A)[B])

  A B  C  D
1 a f 12 55
2 b a 23 12
3 c b 33 23
4 d c  1 33
5 e e 11 11
6 f d 55  1

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM