2014-12-01 9 views
3

Я хочу найти IQR диапазона значений в кадре данных. Эти значения также группируются, поэтому мне нужно найти IQR каждой группы в кадре данных. У меня есть следующая таблица:Поиск IQR групп строк

Block DNAname Spot_Size Molarity Cy3_Fluorescence 
1 DNA 01 100pl 100 14266 
1 DNA 01 100pl 100 16020 
1 DNA 01 100pl 100 15705 
1 DNA 01 100pl 100 15783 
1 DNA 01 100pl 100 15834 
1 DNA 01 100pl 50 12248 
1 DNA 01 100pl 50 12209 
1 DNA 01 100pl 50 12511 
1 DNA 01 100pl 50 12316 
1 DNA 01 100pl 50 12469 
1 DNA 01 100pl 25 9626 
1 DNA 01 100pl 25 9804 
1 DNA 01 100pl 25 9794 
1 DNA 01 100pl 25 10020 
1 DNA 01 100pl 25 9739 
1 DNA 01 100pl 10 7158 
1 DNA 01 100pl 10 6802 
1 DNA 01 100pl 10 7378 
1 DNA 01 100pl 10 5949 
1 DNA 01 100pl 10 7484 
1 DNA 01 100pl 5 5257 
1 DNA 01 100pl 5 5560 
1 DNA 01 100pl 5 6076 
1 DNA 01 100pl 5 5925 

я запускаю следующий код, чтобы найти МКР:

aggregate(Cy3.DNA1.100pl.1uM$Cy3_Fluorescence, list(Molarity= 
    Cy3.DNA1.100pl.1uM$Molarity, Spot_Size=Cy3.DNA1.100pl.1uM$Spot_Size), IQR) 

Это дает мне вывод:

Molarity Spot_Size x 
     5  100pl 384 
    10  100pl 576 
    25  100pl  65 
    50  100pl 221 
    100  100pl 129 

Этой выход группу всем molarities правильно но IQR неверен. Если приведенный выше код означает, как функцию вместо МКР значения для х (значение функции) является правильным, как так:

Molarity Spot_Size  x 
    5  100pl  5752.4 
    10  100pl  6954.2 
    25  100pl  9796.6 
    50  100pl  12350.6 
    100  100pl  15521.6 

Ожидаемые IQRS должны быть следующими:

Molarity IQR 
100  324.25 
50  258 
25  363 
10  519.5 
5  400 

Любая помощь было бы высоко оценено. Если у кого-нибудь есть идеи, как я мог бы выполнять эту функцию для IQR, когда есть группы размеров пятен (где размер пятна варьируется от 100pl-400pl), включая категории молярности, я хотел бы их услышать.

Благодарим вас.

+0

'' IQR' использует quantile' функция, которая, в свою очередь, использует '9' алгоритмы с' type' аргумента. По умолчанию используется 'type = 7'. Например, вы можете изменить агрегат 'type'' (список Cy3.DNA1.100pl.1uM $ Cy3_Fluorescence, список (Молярность = Cy3.DNA1.100pl.1uM $ Молярность, Spot_Size = Cy3.DNA1.100pl.1uM $ Spot_Size) , IQR, type = 5) 'Из справочной страницы'? IQR'' IQR (x, na.rm = FALSE, type = 7) ' – akrun

+0

Привет, Akrun, спасибо за ваш комментарий. Я пробовал различные типы, однако они не возвращают истинный IQR. Я думаю, что это может быть проблемой с тем, что я хочу найти IQR для групп из 5,10,25,50 и 100 с основной группой размеров пятна. Я думаю, что IQR вычисляется, принимая группы как числовые значения, а не категории. Хотя я не знаю, как это решить. – MRF

+0

Возможно, лучше разместить ожидаемый IQR и для данных примера. – akrun

ответ

3

Неясно, связана ли ваша проблема с агрегацией или о вашем (??) определении IQR. Существует много способов расчета IQR (см. this и this). Насколько я могу судить, ни один из них не дает результатов в вашем посте.

Что касается агрегирования в зависимости от размера пятна и молярность, вот два пути:

# use aggregate(...) in base R - will be slow with large datasets 
aggregate(Cy3_Fluorescence~Molarity+Spot_Size,df,IQR) 
# Molarity Spot_Size Cy3_Fluorescence 
# 1  5  100pl   478.5 
# 2  10  100pl   576.0 
# 3  25  100pl    65.0 
# 4  50  100pl   221.0 
# 5  100  100pl   129.0 

# use data.table - will be extremely fast. 
library(data.table) 
setDT(df)[,list(IQR=IQR(Cy3_Fluorescence)),by=list(Molarity,Spot_Size)] 
# Molarity Spot_Size IQR 
# 1:  100  100pl 129.0 
# 2:  50  100pl 221.0 
# 3:  25  100pl 65.0 
# 4:  10  100pl 576.0 
# 5:  5  100pl 478.5 
+0

Большое спасибо jlhoward, это очистило его! – MRF

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