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