将唯一组分配给相同的行

时间:2017-09-15 10:55:27

标签: r

这是我拥有的数据框的简化版本:

structure(list(a = structure(c(1L, 1L, 1L), .Label = "A", class = "factor"), 
    b = structure(c(2L, 2L, 1L), .Label = c("A", "B"), class = "factor"), 
    c = structure(c(1L, 1L, 1L), .Label = "A", class = "factor")), .Names = c("a", 
"b", "c"), row.names = c("id1", "id2", "id3"), class = "data.frame")

在这个df中,row.names是唯一的ID(我知道它打破了整洁数据的规则)。

在该示例中,我们可以看到行id1和rowid2是重复的。

我想要做的是确定它们是重复的,并为这些重复项指定唯一的组名。但请注意,将有多行与其他行重复。

我想要的输出是:

ID_NAME  A B C GROUP
row_id1  A B A   1
row_id2  A B A   1
row_id3  A A A   2

有什么想法吗?

编辑:

原始数据示例:

dput(head(temp))
structure(list(name = c("3 - ПЛАСТ  ДОО   С.МУРТИНО  Друштво за производство,трговија и услуги увоз-извоз", 
"FABRIKA ZA OPREMA I DELOVI FOD DOOEL NOVACI AD ELEM SKOPJE", 
"Tрговско друштво за трговија на големо и мало и превоз СЕЈ-ПРОМ  Охрид ДОО", 
"АВТ ИНТЕРНАТИОНАЛ ДОО СКОПЈЕ   Друштво за производство,трговија и услуги", 
"АГНЕСА  ДООЕЛ  БИТОЛА Друштво за производство услуги и трговија на големо и мало", 
"АГРАР ТРЕЈД ДООЕЛ Велес"), h_interni_procent = c(0.02, 0.01, 
NA, NA, NA, 0.015), h_interni_iznos_od = c(NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_), h_interni_iznos_do = c(NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), h_interni_min_iznos = c(12, 
10, 10, 6, 10, 10), h_internet_pp53_min_iznos = c(NA, NA, 2, 
NA, NA, NA), h_kibs_procent = c(0.015, 0.015, 0.015, NA, NA, 
0.015)), .Names = c("name", "h_interni_procent", "h_interni_iznos_od", 
"h_interni_iznos_do", "h_interni_min_iznos", "h_internet_pp53_min_iznos", 
"h_kibs_procent"), class = c("data.table", "data.frame"), row.names = c(NA, 
-6L), .internal.selfref = <pointer: 0x0000000000220788>)

2 个答案:

答案 0 :(得分:1)

我们可以从行名称创建一个列,然后按列a,b,c分组,得到.GRP

library(data.table)
setDT(df1, keep.rownames = TRUE)[, GROUP := .GRP, by = .(a, b, c)][]

使用新示例

temp[, GROUP := .GRP, by = c(names(temp)[3:7])]

答案 1 :(得分:1)

此代码将生成您想要的数据框。我将唯一ID移动到新列中,因为合并操作将覆盖您的rownames。

b <- unique(a)
b$group <- 1:nrow(b)
a$id <- rownames(a)
c <- merge(a,b)

如果需要,您可以将ID移回行名称。

rownames(c) <- c$id
c$id <- NULL