假设您有如下数据框:
dfiris <- rbind(iris[1:5, -5], iris[1:5, -5], iris[1:5, -5], iris[1:5, -5], iris[1:5, -5])
由于前5行再重复4次,我想有效地得到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
函数duplicate()
对我没用,因为它只会在某个重复行的第二次出现时返回TRUE。
我的(低效)解决方案:
apply(dfiris, 1, function(df) {
which(apply(unique(dfiris), 1, function(df_u) identical(df, df_u)))
})
必须有更快的方法来做到这一点。有什么建议吗?
答案 0 :(得分:2)
使用data.table:
library(data.table)
setDT(dfiris, keep.rownames=TRUE)
print(setkey(dfiris[, list(rn=as.numeric(rn), firstOcc=.I[1]),
by=c(names(dfiris)[-1])], rn))
答案 1 :(得分:1)
您也可以尝试:
library(dplyr)
left_join(dfiris,mutate(distinct(dfiris), rn=row_number()))
%>% select(rn)