如果不同数据集中的两个元素相等,则分配值

时间:2018-02-18 20:49:49

标签: r variables dataframe

我有两个不同维度的数据集,我想在一个新变量中附加一个相等行的值。

> data
  a     b
1 TR123 P823   
2 TR123 P842   
3 TR456 P846   
4 TR456 P904 

> data2
  d     f     c
1 TR456 P846  UN
2 P904  TR456 REL
3 P904  TR453 REL

我想有这样的数据:

> data
  a     b    c
1 TR123 P823 NA    
2 TR123 P842 NA  
3 TR456 P846 UN  
4 TR456 P904 REL

我尝试使用ifelse,apply或for循环来解决我的问题,但它不起作用。 例如:

data$c<-ifelse(data$a==data2$d&data$b==data2$f, data2$c,
     ifelse(data$a==data2$f&data$b==data2$d,data2$c, NA))

我期待着您的建议!

1 个答案:

答案 0 :(得分:-1)

您可以尝试以下操作:

data=tibble(a=c("TR123","TR123","TR456","TR456"),b=c("P823 ","P842","P846","P904"))
data2=tibble(a=c("TR456","P904","P904"),b=c("P846","TR456","TR453"),c=c("UN","REL","REL"))
dataRows=((data$a %in% data2$a | data$a %in% data2$b)&(data$b %in% data2$a| data$b %in% data2$b))%>%which() 
data2Rows=((data2$a %in% data$a | data2$a %in% data$b)&(data2$b %in% data$a| data2$b %in% data$b))%>%which() 
data$c<-NA
data$c[dataRows]<-data2$c[data2Rows]

> data
# A tibble: 4 x 3
  a     b       c    
  <chr> <chr>   <chr>
1 TR123 "P823 " NA   
2 TR123 P842    NA   
3 TR456 P846    UN   
4 TR456 P904    REL