这是我拥有的数据框的简化版本:
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>)
答案 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