如何比较2个datafram并选择其中一个的某些行在另一个df的某些列中具有相同的值

时间:2019-09-20 06:32:15

标签: r dataframe

我有2个数据帧df1和df2,我想检查df2中是否有4列的值与df1相同的行?

               df1 

                    a1    a2.    a3     a4
                    1      2      3     4
                    1      2      3     5
                    1      6      3     3
                    1      2      8     4


               df2 

                    a1    a2.    a3     a4
                    1      2      3     9
                    4      2      8     5
                    1      6      3     7
                    5      2      8     2

假设我要选择df2中在a1,a2和a3中的df1中具有相同值的行:

输出

                    a1    a2.    a3     a4
                    1      2      3     9
                    1      6      3     7

2 个答案:

答案 0 :(得分:3)

使用dplyr,我们可以从a4取消选择列df1,执行inner_join,然后使用distinct_all()删除重复的行。

library(dplyr)


df2 %>% 
  inner_join(select(df1, -a4)) %>% 
  distinct_all()

  a1 a2. a3 a4
1  1   2  3  9
2  1   6  3  7

或使用base R

unique(merge(df1[,-4], df2))

或者:

unique(merge(subset(df1, select = -a4), df2))

答案 1 :(得分:1)

使用基数R,我们可以#define N 10 typedef char stackType; typedef struct { int top; stackType S[N]; } stack; void createStack(stack *ps) { ps->top = -1; } int push(stackType data, stack *ps) { if (ps->top < N - 1) { ps->top++; ps->S[ps->top] = data; return 1; } return 0; } void Ex01() { stack *stack; createStack(&stack); char input; printf("Please enter letters. Enter 'c' top stop:\n"); scanf(" %c", &input); while (input != 'c') { push(input, &stack); scanf(" %c", &input); } } int main() { Ex01(); } 对数据框逐行关注列,并在paste中选择匹配的行。

df2