如何在R中比较变量并返回公共变量

时间:2018-08-20 21:24:52

标签: r compare

我有一个非常简单的数据集,该个人的ID列为一列,DOB则为一列。

示例:

CREATE OR REPLACE TYPE myObjectFormat AS OBJECT
(
    A INT,
    B DATE,
    C VARCHAR2 (25)
)
/

CREATE OR REPLACE TYPE myTableType AS TABLE OF myObjectFormat
/

CREATE OR REPLACE FUNCTION SB360.test_func (P_ID VARCHAR2)
    RETURN myTableType
    PIPELINED
IS
    v_obj        myObjectFormat := myObjectFormat (NULL, NULL, NULL);
    v_cur        SYS_REFCURSOR;
    QUERY_STMT   VARCHAR2 (32767);
    A            INT;
    B            DATE;
    C            VARCHAR2 (25);
BEGIN
    QUERY_STMT := 'select a,b,c from test where id=' || P_ID;

    OPEN V_CUR FOR QUERY_STMT;

    LOOP
        FETCH V_CUR INTO a, b, c;

        EXIT WHEN V_CUR%NOTFOUND;

        v_obj.A := A;
        v_obj.b := b;
        v_obj.c := c;

        PIPE ROW (v_obj);
    END LOOP;

    RETURN;
END;
/

我正在尝试用R编写一个代码,该代码将比较所有DOB,并在DOB相同但ID不同时打印ID和DOB。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

让数据按DOB排列,可以比较成对

library(tidyverse)

x_df %>% 
  group_by(DOB) %>% 
  mutate(idord = paste0("x", 1:n()) ) %>% 
  spread(idord, ID) %>% 
  filter(x1 != x2)

结果是

  DOB       x1    x2   
  <chr>     <chr> <chr>
1 4/16/1955 ID-1  ID-3

如果您可能有多于2对,那么您可以使用此

x_df %>% 
  group_by(DOB) %>% 
  summarise(idcount = n_distinct(ID), IDall = paste(ID, collapse = "|")) %>% 
  filter(idcount > 1)

一个单元格中的ID数和所有ID

  DOB       idcount IDall    
  <chr>       <int> <chr>    
1 4/16/1955       2 ID-1|ID-3