繁体   English   中英

R,Tidyverse:用相应分布中随机抽取的值替换 data.frame 中的每个因子(每个因子值一个)

[英]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))

Output

# 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM