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 分配给红色..

4

1 回答 1

0

如果您的数据按照示例进行排序,请为均值和标准偏差创建向量。然后使用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)
于 2016-03-11T20:17:46.990 回答