У меня есть набор данных, который выглядит так:
Область, край | Имя |
---|---|
Регион 1 | Имя 14 |
Регион 2 | Имя 18 |
Регион 2 | Имя 2 |
Регион 2 | Имя 21 |
Регион 2 | Имя 44 |
Регион 3 | Имя 64 |
Регион 3 | Имя 24 |
Регион 4 | Имя 1 |
Регион 4 | Имя 1 |
Регион 4 | Имя 98 |
Регион 5 | Имя 98 |
Регион 5 | Имя 8 |
Регион 5 | Имя 8 |
Регион 5 | Имя 8 |
Регион 5 | Имя 98 |
Мне нужно разбить данные по регионам, а затем выбрать случайную выборку только из 5% «имени» для каждого региона на основе количества строк в регионе.
Допустим, в регионе 2 есть 30 имен, тогда мне нужна случайная выборка 3 * 0,05. Если в регионе 6 50 имен, то мне нужна случайная выборка 5 * 0,05.
До сих пор мне удалось разделить() данные, используя
d = split(data, f = data$Region)
но когда я пытаюсь запустить функцию lapply, я получаю сообщение об ошибке, что в списке, предоставленном split(), есть другое количество строк.
lapply(data, function(x) {
sample_n(data, nrow(d)*.05)
} )
есть идеи?
Спасибо
Вот базовое решение R.
lapply(split(data, data$Region),
\(x) x[sample(nrow(x), nrow(x) * 0.05),])
Затем вы можете преобразовать его обратно во фрейм данных с помощью rbind
спасибо, нет ли опечатки с "\"? я получаю сообщение об ошибке «Ошибка: неожиданный ввод в: «lapply (split (data, data $ Region), \» "
@DeebaYavrom Возможно, вы используете старую версию R. Попробуйте заменить \(x)
на function(x)
поделитесь остальной частью своего кода и сообщением об ошибке, не предоставляйте фотографии своих данных, используйте
dput()
, чтобы поделиться своими данными