2016-03-11 4 views
0

У меня есть этот набор данных structure(list(Color = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("blue", "green", "red" ), class = "factor")), .Names = "Color", row.names = c(NA, -30L ), class = "data.frame")Сформировать набор данных с заданными средними и дисперсиями на основе цвета

Я хотел бы добавить столбец, который присваивает среднее значение 5 и дисперсии от 2 до синего, среднее из 10 и дисперсия от 4 до зеленого и среднее значение 100 и дисперсия от 15 до красного.

+0

ли в ответ помощь? –

ответ

0

Если ваши данные отсортированы, как в примере, создайте векторы для средств и std.deviations. Затем используйте Map позвонить rnorm по каждой группе:

mus <- c(5, 10, 100) 
sds <- c(2, 4, 15) 
nums <- Map(function(n,mu, sd) rnorm(n, mu, sd), table(df1$Color), mus, sds) 
df1$rndm <- unlist(nums) 
df1 
# Color  rndm 
# 1 blue 5.048143 
# 2 blue 8.159234 
# 3 blue 7.029401 
# 4 blue 3.298584 
# 5 blue 3.388559 
# 6 blue 3.125807 
# 7 blue 3.428520 
# 8 blue 3.659469 
# 9 blue 7.881609 
# 10 blue 3.483098 
# 11 green 5.942954 
# 12 green 3.172638 
# 13 green 10.872443 

обновление

Для замены без необходимости сортировки изменить последнюю строку на:

df1[order(df1$Color),"rndm"] <- unlist(nums) 
+0

Мои данные не отсортированы .. есть ли способ сделать это по конкретному цвету ..? Я должен уметь сортировать это иначе .. просто любопытно. –

+0

Вы можете добавить 'stack (nums)' он будет сортировать для вас bc список имеет имена –

+0

Добавлен еще один способ. –