2016-08-14 3 views
4

Я работаю с данными, содержащими 10.000 человек. Данные содержат 8 двоичных (0, 1) переменных. Каждая переменная является индикатором, если существует модуль опроса == 1 или нет == 0. В целом, 2^8 = 256 возможных комбинаций из 0 и 1 для каждой переменной и .Группа лиц с одинаковыми рядами

Цель: Я хочу группировать людей с одинаковыми строками (это означает индивидуумы, которые принимали участие в тех же модулях).

Мои данные выглядит как в следующем примере с onlye трех переменных:

# example 
dat <- data.frame(id = 1:8,   # unique ID 
        v1 = rep(0:1, 4), 
        v2 = rep(1:0, 4), 
        v3 = rep(1:1, 4)) 

# I can find the unique rows 
unique(dat[ , -1]) 

# I also can count the number of occurence of the unique rows (as suggested by http://stackoverflow.com/questions/12495345/find-indices-of-duplicated-rows) 
library(plyr) 
ddply(dat[ , -1], .(v1, v2, v3), nrow) 

# But I need the information of the occurence on the individual level like this: 
dat$v4 <- rep(c("group1", "group2"), 4) 

# The number of rows alone is not sufficient because, different combinations can be the same counting 
+4

'взаимодействие (Дат [-1 ], drop = TRUE) ' – user20650

+0

Не можете ли вы просто использовать' with (dat, v1 + 2 * v2 + 4 * v3) 'как переменную группировки? –

+1

Спасибо @ user20650 !!! Это помогает и является очень простым решением! – maller

ответ

0

Я бы рекомендовал .GRP от "data.table" для этого:

library(data.table) 
> as.data.table(dat)[, v4 := sprintf("group_%s", .GRP), .(v1, v2, v3)][] 
    id v1 v2 v3  v4 
1: 1 0 1 1 group_1 
2: 2 1 0 1 group_2 
3: 3 0 1 1 group_1 
4: 4 1 0 1 group_2 
5: 5 0 1 1 group_1 
6: 6 1 0 1 group_2 
7: 7 0 1 1 group_1 
8: 8 1 0 1 group_2 

 Смежные вопросы

  • Нет связанных вопросов^_^