2016-10-26 6 views
1

Для каждого кластера в temp3 вычислите его центроид. В конце концов, мне не хотелось бы называть число кластеров в координатах центра тяжести.Вычислить центроид для каждой группы, используя dplyr

данных:

> head(temp3) 
          X   Y Transcripts Genes Timepoint Run Cluster 
6B_0_GACCGCGATATT -102.1425877 13.944831  134028 11269  Day 0 6B  2 
6B_0_ATTGCGGAGACA -38.6617527 0.600154  106849 10947  Day 0 6B  3 
6B_0_ATGGTCACCACT -23.3275424 34.178312  105817 10495  Day 0 6B  4 
6B_0_ATATTGCTAATC -0.6069128 52.449397  79920 9650  Day 0 6B  4 
6B_0_ATCTAATCTACC -0.4738788 54.756711  72912 9294  Day 0 6B  4 
6B_0_CGCAGTGTGCCC 108.5333675 76.637930  70132 9291  Day 0 6B  6 

Код:

library(dplyr) 
temp3 %>% group_by(Cluster) %>% mutate(., Centroid=rowMeans(cbind(.$X, .$Y), na.rm = TRUE)) 

Который возвращает:

Error: incompatible size (13792), expecting 198 (the group size) or 1

EDIT:

другой подход:

library(cluster) 
temp3 %>% group_by(Cluster) %>% mutate(., Centroid=pam(cbind(.$X, .$Y), 1)$medoids) 

возвращается:

Error: incompatible size (2), expecting 198 (the group size) or 1

+0

Соответствующее сообщение: http://stackoverflow.com/questions/3505701/r-grouping-functions-sapply- vs-lapply-vs-apply-vs-tapply-vs-by-vs-aggrega и http://gis.stackexchange.com/a/6026/61922 – zx8754

ответ

1

Как насчет

temp3 %>% group_by(Cluster) %>% mutate(meanX=mean(X), meanY=mean(Y)) 

если вы хотите результат, с теми же размерами, что и вход.

Или, если вы просто хотите одну строку для каждого кластера (который кажется более вероятным):

temp3 %>% group_by(Cluster) %>% summarise(meanX=mean(X), meanY=mean(Y)) 
Смежные вопросы