我有一个非常简单的数据集,该个人的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。
有什么建议吗?
答案 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