Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 与df比较并基于匹配行填充col_R_Dplyr - Fatal编程技术网

R 与df比较并基于匹配行填充col

R 与df比较并基于匹配行填充col,r,dplyr,R,Dplyr,我有两个像这样的df id1<-c(2,2,2,1,3) id2<-c(4,4,5,2,3) OS<-c(1,2,3,4,5) a <- cbind(OS, id1, id2) a 我想创建一个新的x列,其中一个$OS和一个$OSi匹配,即1->1,2->2,但只有在每个df中的后续两个col一致的情况下,才使用“0”,而在不一致的情况下使用“1”。 我想要的输出是这样的: id1<-c(2,2,2,1,3) id2<-c(4,4,5,2,3) OS<

我有两个像这样的df

id1<-c(2,2,2,1,3)
id2<-c(4,4,5,2,3)
OS<-c(1,2,3,4,5)
a <- cbind(OS, id1, id2) 
a
我想创建一个新的x列,其中一个$OS和一个$OSi匹配,即1->1,2->2,但只有在每个df中的后续两个col一致的情况下,才使用“0”,而在不一致的情况下使用“1”。 我想要的输出是这样的:

id1<-c(2,2,2,1,3)
id2<-c(4,4,5,2,3)
OS<-c(1,2,3,4,5)
x <-c(0,0,0,1,0)
a <- cbind(OS, id1, id2, x) 
a
到目前为止,我已经尝试过:

a$x <- case_when(a$OS %in% b$OSi &
                     a$id1 %in% b$I1 & 
                     b$id2 %in% b$I2 ~ '0') %>%
  replace_na('1')
然而,我发现当只满足第一个参数时,情况是这样的。i、 e.0/1的比率根据变量的顺序而变化

此外,上面是一个顶部df。我的实际数据约为10000行,b比a长。我可能还想删除不是a中的任何行,而是b中的任何行

我希望这足够清楚。 Dplyr我喜欢集成到管道中

干杯

这是否有效:

> id1<-c(2,2,2,1,3)
> id2<-c(4,4,5,2,3)
> OS<-c(1,2,3,4,5)
> a <- data.frame(OS, id1, id2) 
> 
> 
> i1<-c(2,2,2,4,3)
> i2<-c(4,4,5,2,3)
> OSi<-c(1,2,3,4,5)
> b <- data.frame(OSi, i1, i2) 
> 
> 
> transform(a %>% inner_join(b, by = c('OS' = 'OSi')), x = ifelse((id1 == i1) & (id2 == i2), 0, 1)) %>% select(OS, id1, id2, x)
  OS id1 id2 x
1  1   2   4 0
2  2   2   4 0
3  3   2   5 0
4  4   1   2 1
5  5   3   3 0
> 

我使用了internal_join,因此我们是基于您的第一个条件a$OS==b$OSi进行连接的

我认为我无法绑定df,因为它们的长度不同:data.frame中有错误…,check.names=FALSE:参数意味着不同的行数:76258996 OK,根据示例数据假设是这样。那么,操作系统和OSi重叠吗?在这种情况下,它们可以用作主键和外键吗?如果是这样的话,哪一个是你的主表,我假设它是一个?已经更改了代码,你能检查一下它是否有效吗?嗨,Karthik,谢谢你,但是它不太有效。我不知道为什么,但它给我的积极1结果比我预期的要少。好的,你能在上面的样本数据中包括你没有得到预期输出的部分吗?样本数据中只有5行,可能很难将问题可视化。
> id1<-c(2,2,2,1,3)
> id2<-c(4,4,5,2,3)
> OS<-c(1,2,3,4,5)
> a <- data.frame(OS, id1, id2) 
> 
> 
> i1<-c(2,2,2,4,3)
> i2<-c(4,4,5,2,3)
> OSi<-c(1,2,3,4,5)
> b <- data.frame(OSi, i1, i2) 
> 
> 
> transform(a %>% inner_join(b, by = c('OS' = 'OSi')), x = ifelse((id1 == i1) & (id2 == i2), 0, 1)) %>% select(OS, id1, id2, x)
  OS id1 id2 x
1  1   2   4 0
2  2   2   4 0
3  3   2   5 0
4  4   1   2 1
5  5   3   3 0
>