Мы обычно запрашиваем некоторые примеры данных и указание того, какие подходы вы уже использовали. Но для начала, вот один из подходов, использующий dplyr
.
Давайте сделаем несколько поддельных данных за 4 года, 12 месяцев в году и 1 наблюдение в месяц, итого 48 строк:
set.seed(1001) # for reproducibility
raindata <- data.frame(Year = rep(2000:2003, each = 12),
Month = rep(month.name, 4),
Rain = sample(0:100, 48, replace = TRUE),
stringsAsFactors = FALSE)
dplyr
имеет функцию sample_frac()
, которая будет отбирать заданную долю строк. Например, для выборки 95% из них:
library(dplyr)
raindata %>%
sample_frac(0.95)
Затем вы можете inner_join
отобранных строк к исходным данным - но объединить только по году и месяцу. Это даст вам два столбца Rain
: Rain.y
(оригинал) и Rain.x
, содержащие 5% значений NA, поскольку были сопоставлены только Year
и Month
, а не Rain
:
raindata_new <- raindata %>%
sample_frac(0.95) %>%
right_join(raindata,
by = c("Year", "Month"))
Для 10%, 20%, 30% и 40% просто замените значение в sample_frac()
на 0,9, 0,8, 0,7 и 0,6 соответственно.