2016-10-19 5 views
1

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

#1 sampleid  replication measurement 
#2 1   1    0.5 
#3 1   2    0.4 
#4 1   3    0.3 
#5 1   4    0.2 
#6 1   5    0.3 
#7 2   1    0.5 
#8 3   1    0.5 
#9 4   1    0.5 
#10 4   2    0.3 
#11 4   3    0.2 
#12 5   1    0.1 

Это мой второй день с R, так что я извиняюсь, если это довольно простая задача ,

Что бы я хотел сделать, это исключить «измерение» и «sampleid», если соответствующая «репликация» равна < 2. Основываясь на образце, который я дал, я хотел бы видеть исключения в строках # 7, # 8 , и № 12.

Я пробовал использовать комбинацию subset и length, но он не достиг того, что мне нужно. Есть ли простой способ, который мне не хватает?

Большое спасибо.

ответ

2

Мы можем использовать ave:

subset(dat, ave(replication, sampleid, FUN = length) >= 2) 

# sampleid replication measurement 
#1   1   1   0.5 
#2   1   2   0.4 
#3   1   3   0.3 
#4   1   4   0.2 
#5   1   5   0.3 
#8   4   1   0.5 
#9   4   2   0.3 
#10  4   3   0.2 

данных:

dat <- structure(list(sampleid = c(1L, 1L, 1L, 1L, 1L, 2L, 3L, 4L, 4L, 
4L, 5L), replication = c(1L, 2L, 3L, 4L, 5L, 1L, 1L, 1L, 2L, 
3L, 1L), measurement = c(0.5, 0.4, 0.3, 0.2, 0.3, 0.5, 0.5, 0.5, 
0.3, 0.2, 0.1)), .Names = c("sampleid", "replication", "measurement" 
), class = "data.frame", row.names = c(NA, -11L)) 
+0

Отлично! Отлично работает; Спасибо большое. – bashful

+0

Странно! Должно быть, я отставал от своего конца; ответ не появился как правильный. Починю! Еще раз спасибо – bashful

0
subset(data, sampleid %in% unique(data$sampleid[duplicated(data$sampleid)])) 
+0

Спасибо! Очень ценю помощь. – bashful

0

Возможность использования dplyr является

library(dplyr) 
dat %>% 
    group_by(sampleid) %>% 
    filter(n() > 1) 
# sampleid replication measurement 
#  <int>  <int>  <dbl> 
#1  1   1   0.5 
#2  1   2   0.4 
#3  1   3   0.3 
#4  1   4   0.2 
#5  1   5   0.3 
#6  4   1   0.5 
#7  4   2   0.3 
#8  4   3   0.2 
+0

dplyr является одним из пакетов, правильно? Спасибо за помощь. – bashful

+0

@bashful Да, вы правы – akrun