首页 > 解决方案 > 如果多列的值在不同的数据框大小中相等 - R

问题描述

我有两个数据框,每个数据框有两列,我想知道如何创建一个向量,1当两个值都在另一个数据框中,或者0两者都不在时。

x <- data.frame(A = c(1,2,3,4,5,6,7,1),
                B = c(10,1,30,1,50,60,1,80),
                stringsAsFactors = FALSE)
y <- data.frame(C = c(1,2,3,4,5,6,7,8,9,10),
                D = c(1,20,30,40,50,60,70,80,90,100),
                stringsAsFactors = FALSE)

vector <- ifelse(y$C == x$A & y$D == x$B, 1,0) # This works when both dataframe are the same size.

当数据框大小相同时它可以工作,但是当它不是时,我不能使用%in%它来评估 if Ais inC和 if Bis in D,当我试图评估 A 和 B 是否在 C 和 D 中时同时。

标签: rdplyrtidyversedata-manipulation

解决方案


行的顺序很重要吗?

library(tidyverse)

x <- mutate(x, id=as.character(1:nrow(x)))
y <- mutate(y, id=as.character(1:nrow(y)))

xy <- full_join(y, x, by="id")

xy %>% mutate(result = ifelse(C == A & D == B, 1,0) 
                )

您期望y没有“匹配”的行会发生x什么?

    C   D id  A  B result
1   1   1  1  1 10      0
2   2  20  2  2  1      0
3   3  30  3  3 30      1
4   4  40  4  4  1      0
5   5  50  5  5 50      1
6   6  60  6  6 60      1
7   7  70  7  7  1      0
8   8  80  8  1 80      0
9   9  90  9 NA NA     NA
10 10 100 10 NA NA     NA

推荐阅读