2016-03-31 3 views
1

У меня есть набор данных, который выглядит следующим образом:граф уникальных значений по группам в R

SID  group timepoint 
5402  A 0 
5402  B 0 
5402  C 1 
5403  A 0  
25403  B 1 
25403  C 1 

Я хочу, чтобы подсчитать, сколько уникальных Сида есть в группе х временной точке. До сих пор я делал комбинацию «от руки», как это:

length(unique(subset(df, timepoint=='0' & group=='A')$SID)) 
length(unique(subset(df, timepoint=='0' & group=='B')$SID)) 
... 

Есть ли способ, чтобы использовать функцию группирования, которая дает мне таблицу со всеми подсчетами? (например, by, или tapply?) Спасибо!

+0

Интересно, вы попробовали Googling название вашего собственного вопроса? Просто копируя/вставляя свой заголовок в Google, я получаю так много хороших результатов поиска. –

+0

@DavidArenburg, я попытался его найти! Но я думаю, что я сосредоточился на том, чтобы выяснить, как использовать tapply или забыл искать очевидное :-( – Sininho

+0

Спасибо за ссылку – Sininho

ответ

2

Мы можем использовать uniqueN от data.table. Преобразуйте 'data.frame' в 'data.table' (setDT(df1)), сгруппированные по 'группе' и 'timepoint', получите длину unique элементов 'SID' (uniqueN(SID)).

library(data.table) 
setDT(df1)[, .(UnSID=uniqueN(SID)), .(group, timepoint)] 
+0

, которая сработала, спасибо! – Sininho