Создание новых значений переменных по подмножеству

115
16

У меня есть набор данных, и я пытаюсь создать новую переменную со случайными значениями, связанными с определенным подмножеством.

Например, с учетом кадра данных:

data(iris)
iris=iris

Я хочу другую переменную, которая связывает каждое значение iris$Species со случайным числом (от 0 до 1). Это может быть выполнено обходным путем путем создания кадра данных:

df=data.frame(unique(iris$Species),runif(length(unique(iris$Species))))

И слияние его с исходным фреймом данных:

iris=merge(iris,df,by.x="Species",by.y="unique.iris.Species.")

Это делает то, что я хочу, но это неэлегантно. Более того, если бы я хотел многократно повторять этот процесс по различным переменным, этот процесс был бы обременительным. На что я надеюсь, это быстрый метод индексирования, который, надеюсь, будет выглядеть примерно так:

iris$Species.unif=runif(length(unique(iris$Species)))[iris$Species]

Учитывая, что индексация в R, как правило, очень гладкая, я ожидаю, что есть способ сделать это, о котором я не знаю.

Заранее спасибо.

спросил(а) 2021-01-19T15:48:53+03:00 2 месяца, 3 недели назад
1
Решение
130

Вы можете попробовать использовать уровни:

iris <- iris
iris$species_unif <- iris$Species
levels(iris$species_unif ) <- runif(length(levels(iris$Species)))

ответил(а) 2021-01-19T15:48:53+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема