[英]R, Tidyverse: Replace each factor in a data.frame with a randomly drawn value from a corresponding distribution (one for each factor value)
我试图找到以下映射问题的 tidyverse 解决方案,但没有成功。 我从一个数据框开始,其中每个变量都是一个因素。
A B C
1 1 1
2 2 1
3 2 1
每个因子值对应于随机值的分布,就像这样。 我正在尝试将每个对应分布中的变量随机 map 为一个值。
one<-rnorm(5)
one
[1] 0.8257975 1.0291827 -0.5708449 0.1112144 -0.2817895
two<-rnorm(2)
two
[1] -2.06849794 -0.78663065 0.02430413
three<-rnorm(1)
three
[1] 0.1309044
在映射发生之后,这将是一个示例 output。 每个因子值都已被相应分布中的随机值替换。
A B C
0.8257975 1.0291827 -0.5708449
-2.06849794 -0.78663065 0.1112144
0.1309044 0.02430413 -0.2817895
我的解决方案是替换这些因素,这里是一个例子:
library(dplyr)
data <-
tibble(
A = c(1,2,3),
B = c(1,2,2),
C = c(1,1,1)
) %>%
mutate(across(.fns = as.factor))
to_dist <- function(x){
n <- length(x)
case_when(
x == "1" ~ rnorm(n,mean = 10),
x == "2" ~ rnorm(n,mean = 100,sd = 10),
x == "3" ~ rnorm(n,mean = 1),
TRUE ~ NA_real_
)
}
data %>%
mutate(across(.fns = to_dist))
# A tibble: 3 x 3
A B C
<dbl> <dbl> <dbl>
1 8.61 10.3 10.9
2 104. 90.3 9.71
3 1.89 105. 9.26
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.