R data.table брои уникални стойности в множество колони по група

> require(data.table)
> have <- data.table(ID = c(1,1,1,2,2)
+                      , colA = c("A","B","A","A","A")
+                      , colB = c("C","A","B","B","C"))
> have
   ID colA colB
1:  1    A    C
2:  1    B    A
3:  1    A    B
4:  2    A    B
5:  2    A    C
> want <- data.table(ID = c(1,2), UnN = c(3,3))
> want
   ID UnN
1:  1   3
2:  2   3

Имам таблица с данни „имам“ и бих искал да преброя уникалните стойности по група „ID“ в множество колони „colA“ и „colB“. Как да го постигнем?

Не съм сигурен защо следното не работи:

have[, UnN = uniqueN(c("colA","colB")), by = C("ID")]

person LeGeniusII    schedule 13.05.2018    source източник


Отговори (1)


Премахнете кавичките около имената на колоните, така че колоните да могат да бъдат оценени като вектори, преди да бъдат предадени на функцията uniqueN, в противен случай те се оценяват като символни вектори:

have[, .(UnN = uniqueN(c(colA, colB))), ID]
#   ID UnN
#1:  1   3
#2:  2   3
person Psidom    schedule 13.05.2018