Произвольная выборка строк, если более 50 R

#r #dataframe

Вопрос:

У меня есть список из 13 кадров данных, первые несколько строк первого кадра данных выглядят следующим образом:

 > Visit.data_allyears[[1]]
   SiteName year PAdata Longitude Latitude    totalspp  totalhours       lhours temperature    rainfall        NDVI
1    2229AB 2007      0    29.375  -22.125  0.27388999  0.04145321  0.359057436   0.7571729  0.34862768  0.25624133
2    2230CA 2007      0    30.125  -22.625 -0.46728113 -0.43741429 -0.460164072   0.8803066 -0.76683748 -0.15804871
3    2230DA 2007      0    30.625  -22.625 -0.79669052  0.28088696  0.670510998   1.0815264 -0.86448501 -0.68218838
4    2230DB 2007      0    30.875  -22.625 -1.99079956 -0.43741429 -0.460164072   1.3638363 -0.92470284 -0.86108636
5    2231AC 2007      0    31.125  -22.375  2.82681276 -0.43741429 -0.460164072   0.8652892  1.39814838  1.64976237  NA

 

Записи имен сайтов могут повторяться несколько раз. Для каждого кадра данных, если имя сайта повторяется более 50 раз — случайным образом выберите 50 строк из всех повторяющихся строк этого имени сайта и удалите остальные. Все остальное должно оставаться как есть. Поэтому, если сайт не повторяется более 50 раз, просто оставьте как есть.

Как бы это можно было сделать?

Ответ №1:

Вы можете использовать slice_sample от dplyr .

 library(dplyr)

lapply(Visit.data_allyears, function(x) {
  x %>% group_by(SiteName) %>% slice_sample(n = 50)
})
 

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

1. Я получаю следующую ошибку:Ошибка в методе использования(«group_by») : нет применимого метода для «group_by», применяемого к объекту класса «фактор»

2. Как вы применяете этот код? Вы копируете его таким, какой он есть? Этот код должен быть применен к списку кадров данных, которые я использовал lapply .