在dplyr管道期间添加rnorm,但在设置sd时按组设置

在dplyr管道期间添加rnorm,但在设置sd时按组设置,r,R,数据帧: mydf <- data.frame( x = rep(letters[1:3], 4), y = rnorm(12, 0, 3) ) mydf% 突变(z=rnorm(nrow(.),mean=0,sd=sd(y))) 错误:“mutate()”输入“z”有问题。 x输入'z'不能回收到大小4。 ℹ 输入'z'是'rnorm(nrow(.),mean=0,sd=sd(y))`。 ℹ 输入'z'的大小必须为4或1,而不是12。 ℹ 错误发生在组1中:x=“a”。 如何

数据帧:

mydf <- data.frame(
  x = rep(letters[1:3], 4),
  y = rnorm(12, 0, 3)
)
mydf%
突变(z=rnorm(nrow(.),mean=0,sd=sd(y)))
错误:“mutate()”输入“z”有问题。
x输入'z'不能回收到大小4。
ℹ 输入'z'是'rnorm(nrow(.),mean=0,sd=sd(y))`。
ℹ 输入'z'的大小必须为4或1,而不是12。
ℹ 错误发生在组1中:x=“a”。
如何添加z,即y的值加上或减去一个随机数,sd等于组的sd,而不是整个列的sd?

此处的
nrow(.)
将按属性断开分组并获取整行,
mutate
要求新列的
长度
与先前数据的行数相同。因此,这将中断该流,除非我们将列包装在
列表中,这可能不是OP想要的

library(dplyr)
mydf %>% 
   group_by(x) %>% 
   summarise(n = nrow(.))
# A tibble: 3 x 2
#  x         n
#  <chr> <int>
#1 a        12 ###
#2 b        12 ###
#3 c        12 ###
而不是nrow(.)只在rnorm调用中使用1表示n
mydf <- mydf %>% 
  group_by(x) %>% 
  mutate(z = rnorm(nrow(.), mean = 0, sd = sd(y)))
Error: Problem with `mutate()` input `z`.
x Input `z` can't be recycled to size 4.
ℹ Input `z` is `rnorm(nrow(.), mean = 0, sd = sd(y))`.
ℹ Input `z` must be size 4 or 1, not 12.
ℹ The error occurred in group 1: x = "a".
library(dplyr)
mydf %>% 
   group_by(x) %>% 
   summarise(n = nrow(.))
# A tibble: 3 x 2
#  x         n
#  <chr> <int>
#1 a        12 ###
#2 b        12 ###
#3 c        12 ###
mydf %>% 
  group_by(x) %>% 
   mutate(z = rnorm(n(), mean = 0, sd = sd(y)))