R,潮汐宇宙:将数据框中的每个因子替换为从相应分布中随机抽取的值(每个因子值一个)

bnlyeluc  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(113)

我试图为下面的Map问题找到一个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

这将是Map发生后的示例输出。每个因子值都已被相应分布中的随机值替换。

A          B           C
  0.8257975  1.0291827  -0.5708449
-2.06849794 -0.78663065  0.1112144
  0.1309044  0.02430413 -0.2817895
bis0qfac

bis0qfac1#

I解决方案将是替代因子,这里有一个例子:

数据

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

相关问题