根据R

时间:2019-07-09 14:06:58

标签: r merge

我需要创建一个模拟数据,并且在R中合并两列时遇到问题。例如,我有两个vectors

    product <- c("prod_A", "prod_B", "prod_C", "prod_D", "prod_E")
    chemical <- c("chemA", "chemB", "chemC")

我需要根据产品和其中的化学物质创建两列。

例如,最终结果应类似于:

    Product   Chemical

    Prod_A    chemA
              chemB

    Prod_B    chemB
              chemC

    Prod_C    chemA
              chemC

    Prod_D    chemA

    Prod_E    chemA
              chemB
              chemC

1 个答案:

答案 0 :(得分:1)

我们可以使用sample使用chemical为每个product创建group_map s个随机样本。假设绘制的chemical和样本数都是随机的:

library(tidyverse)
set.seed(123)

tibble(product) %>%
  group_by(product) %>%
  group_map(~ tibble(Chemical = sample(chemical, sample(seq_along(chemical)))))

输出:

# A tibble: 11 x 2
# Groups:   product [5]
   product Chemical
   <chr>   <chr>   
 1 prod_A  chemC   
 2 prod_B  chemC   
 3 prod_B  chemB   
 4 prod_B  chemA   
 5 prod_C  chemB   
 6 prod_C  chemA   
 7 prod_C  chemC   
 8 prod_D  chemC   
 9 prod_E  chemC   
10 prod_E  chemB   
11 prod_E  chemA 

请注意,group_map目前处于实验阶段,因此请谨慎使用。另一种选择是splitmaprbind结果,这实际上就是group_map正在做的事情。