如何从成对的级别组合中生成数据帧

时间:2019-09-02 10:14:19

标签: r data.table tidyverse purrr furrr

我想从因子水平与固定水平的组合中生成一个数据帧以进行共享。我有一个如下所示的工作代码,但我想对其进行概括,以便只需输入以下内容即可将其用于任意数量的级别:数据帧df,用于拆分var1的变量,要共享的级别A以及新变量strat的名称。我希望能够将此功能与管道一起使用,以允许其后进行其他操作。任何帮助将不胜感激。

这是我的尝试:

var1 <- c("A", "B", "C", "A", "B", "C", "A", "B", "C", "B")
var2 <- seq(2000, 2009, 1)
var3 <- sample(1:10, 10, replace=T)
var4 <- sample(1:10, 10, replace=T)
df <- data.frame(var1, var2, var3, var4)


df2<-df %>% group_split(var1)   

dfB<-rbind(df2[[1]], df2[[2]]) %>% transform(.,
strat = "BA")

dfC<-rbind(df2[[1]], df2[[3]]) %>% transform(.,
strat = "CA")

df3<-rbind(dfB, dfC)

df3
   var1 var2 var3 var4 strat
1     A 2000    8    5    BA
2     A 2003    5    7    BA
3     A 2006    1    6    BA
4     B 2001    3    6    BA
5     B 2004    6    9    BA
6     B 2007    8   10    BA
7     B 2009    5    5    BA
8     A 2000    8    5    CA
9     A 2003    5    7    CA
10    A 2006    1    6    CA
11    C 2002    9    5    CA
12    C 2005    3    5    CA
13    C 2008    5    1    CA

2 个答案:

答案 0 :(得分:2)

这是您需要的吗?

library(dplyr)
lapply(df2[-1], function(x) rbind(df2[[1]], x)) %>% 
  lapply(function(x)  mutate(x,
    start = unique(var1) %>% 
      sort(decreasing = TRUE) %>% 
      paste(collapse = "")
  )) %>% 
  do.call(rbind, .) 


# A tibble: 13 x 5
   var1   var2  var3  var4 start
   <fct> <dbl> <int> <int> <chr>
 1 A      2000     2     6 BA   
 2 A      2003     7     7 BA   
 3 A      2006     3     4 BA   
 4 B      2001     2     3 BA   
 5 B      2004     1     1 BA   
 6 B      2007     8    10 BA   
 7 B      2009    10     4 BA   
 8 A      2000     2     6 CA   
 9 A      2003     7     7 CA   
10 A      2006     3     4 CA   
11 C      2002     8     2 CA   
12 C      2005     2     1 CA   
13 C      2008     8     8 CA  

答案 1 :(得分:1)

这是另一种方式。我们将"A"组进行不同的划分,并根据group_splitvar1进行划分,现在通过将strat的{​​{1}}值粘贴到first

var1