我想创建一个具有正态分布的随机变量measured
,但是根据我data.frame
中的另一个变量创建一个平均值。出于语法和效率的原因,我想在dplyr
中执行此操作,我是新手。
library(dplyr)
fake <- data.frame(group = rbinom(50,1,0.5))
fake %>%
group_by(group) %>%
mutate(measured = rnorm(1, group, 0.5))
Source: local data frame [50 x 2]
Groups: group
group measured
1 1 0.3501516392
2 0 -0.0004234461
3 1 0.3501516392
4 0 -0.0004234461
5 0 -0.0004234461
6 0 -0.0004234461
7 1 0.3501516392
8 0 -0.0004234461
9 1 0.3501516392
10 1 0.3501516392
这里的问题是我得到一个附加到每个组的绘图,而不是每次观察时的独立绘图。
如何调用rnorm
到我的小组的长度?或者我应该使用不同的函数进行随机抽取?
所以我发现我可以调用组的长度length(group)
。这会产生所需的行为,但我无法判断我是否要求nrow(fake)
抽奖或brow(fake[group == 1,])
抽奖。还有什么进一步的建议吗?
fake <- data.frame(group= rbinom(200,1,0.5))
fake <- fake %>%
group_by(group) %>%
mutate(random = rnorm(length(group), group, 0.5))
ggplot(fake, aes(x = random, fill = factor(group))) + geom_density(alpha=0.4)
答案 0 :(得分:1)
我只是想指出甚至不需要分组。 rnorm
可以采用方法向量,因此您只需将整个group
列传递给它,而不会告诉它单独处理组:
fake %>%
mutate(measured = rnorm(nrow(fake),group,0.5)) %>%
head
group measured
1 1 1.16004276
2 0 -0.05366081
3 0 -0.78353925
4 0 0.01429192
5 0 0.26340507
6 0 -0.34022501
或等效地,正如@rrs指出的那样:
fake %>%
mutate(measured = rnorm(n(),group,0.5))