Исключить данные в R на основе минимального размера выборки

#r #subset

#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 , но это не дало того, что мне было нужно. Есть ли простой способ, которого мне не хватает?

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

Ответ №1:

Мы можем использовать 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))
  

Комментарии:

1. Странно! Должно быть, с моей стороны была задержка; ответ не появился как правильный. Исправит! Еще раз спасибо

Ответ №2:

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

Комментарии:

1. Спасибо! Действительно ценю помощь.

Ответ №3:

Вариант, использующий 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
  

Комментарии:

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