在R或SQL中自动创建组

时间:2014-06-19 02:49:35

标签: sql r

我有一个带有AS_ID列的R数据框,如下所示:

AS_ID
A8653654
B7653655
C5653650
C5653650
A8653654
D1658645
D1658645
C5653650
C5653650
D1658645
C5653650
E4568640
F796740
A8653654
F796740
E4568640

我正在尝试将类似的记录分组为A1,A2,A3等。例如,所有AS_ID为“A8653654”的记录应分组为A1,并可输入新列,如下所示:

AS_ID   AS
A8653654    A1
B7653655    A2
C5653650    A3
C5653650    A3
A8653654    A1
D1658645    A4
D1658645    A4
C5653650    A3
C5653650    A3
D1658645    A4
C5653650    A3
E4568640    A5
F796740 A6
A8653654    A1
F796740 A6
E4568640    A5

我可以使用R或oracle代码,因为我也可以在R中编写SQL代码。任何帮助将受到高度赞赏。与我在上面的示例数据中给出的数据相比,我的数据更具动态性。通用代码将提供更多帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用dense_rank()

在Oracle中获取组标识符
select AS_ID, dense_rank() over (partition by AS_ID order by AS_ID)
from table t;

如果你想在前面加'A',那就连接它:

select AS_ID, 'A' || dense_rank() over (partition by AS_ID order by AS_ID)

答案 1 :(得分:0)

如果您已将这些值读入R data.frame,那么它们可能已经属于"因素"。如果没有,您可以将它们转换为一个因子。但是每个因子值都已自动分配一个唯一的整数ID。这是一个示例data.frame

dd<-read.table(text=c("A8653654", "B7653655", "C5653650", "C5653650", "A8653654", 
  "D1658645", "D1658645", "C5653650", "C5653650", "D1658645", "C5653650", 
  "E4568640", "F796740", "A8653654", "F796740", "E4568640"), col.names="AS_ID")

观察

class(dd$AS_ID)
# [1] "factor"

如果是角色,你可以做

dd$AS_ID <- factor(dd$AS_ID)

要获取唯一ID,只需使用as.numeric,然后在该

前粘贴A.
dd <- cbind(dd, AS=paste0("A",as.numeric(dd$AS_ID)))

,这给了

#> head(dd)
     AS_ID AS
1 A8653654 A1
2 B7653655 A2
3 C5653650 A3
4 C5653650 A3
5 A8653654 A1
6 D1658645 A4