【发布时间】:2016-06-03 08:26:48
【问题描述】:
我使用 data.table 来存储数据。我试图弄清楚每一行中的某些列是否是唯一的。我想在 data.table 中添加一列,如果有重复值,它将保存值“重复值”,如果没有重复值,则为 NA。我要检查重复的列的名称存储在字符向量中。例如,我创建了我的 data.table:
tmpdt<-data.table(a=c(1,2,3,4,5), b=c(2,2,3,4,5), c=c(4,2,2,4,4), d=c(3,3,1,4,5))
> tmpdt
a b c d
1: 1 2 4 3
2: 2 2 2 3
3: 3 3 2 1
4: 4 4 4 4
5: 5 5 4 5
我有另一个变量来指示我需要检查哪些列是否存在重复项。重要的是我能够将列名存储在字符向量中并且不需要“知道”它们(因为它们将作为参数传递给函数)。
dupcheckcols<-c("a", "c", "d")
我希望输出是:
> tmpdt
a b c d Dups
1: 1 2 4 3 <NA>
2: 2 2 2 3 Has Dups
3: 3 3 2 1 <NA>
4: 4 4 4 4 Has Dups
5: 5 5 4 5 Has Dups
如果我使用的是 data.frame,这很容易。我可以简单地使用:
tmpdt<-data.frame(a=c(1,2,3,4,5), b=c(2,2,3,4,5), c=c(4,2,2,4,4), d=c(3,3,1,4,5))
tmpdt$Dups<-NA
tmpdt$Dups[apply(tmpdt[,dupcheckcols], 1, function(x) {return(sum(duplicated(x))>0)})]<-"Has Dups"
> tmpdt
a b c d Dups
1 1 2 4 3 <NA>
2 2 2 2 3 Has Dups
3 3 3 2 1 <NA>
4 4 4 4 4 Has Dups
5 5 5 4 5 Has Dups
但我不知道如何使用 data.table 完成相同的任务。非常感谢任何帮助。
【问题讨论】:
标签: r data.table