使用data.table存儲數據。我試圖弄清楚每一行中的某些列是否是唯一的。我想向data.table添加一列,如果有重複的值,它將保存值「重複值」,如果沒有重複值,則爲NA。我想檢查重複的列的名稱存儲在一個字符向量中。例如,我創建我的data.table:確定列值是否唯一在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完成同樣的任務。任何幫助是極大的讚賞。
我一般不是'eval(parse())'方法的粉絲,但是這裏的邏輯很好,它的尺度非常好。 +1 – A5C1D2H2I1M1N2O1R2T1
@AnandaMahto我同意,我一般不喜歡使用它,因爲它可能會變得醜陋,但它確實有它的用處。 – tospig