重组数据框(pivot_wider)

时间:2020-11-12 16:51:10

标签: r tidyverse

我的data.frame再次遇到一些问题,我需要进行重组:

我的数据框如下所示。它描述了三个数据集(1-3)以及这三个数据集包含的列名:

df <- data.frame(df =   c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3),
                 vars = c("var1", "var2", "var3", "var4", 
                          "var1", "var1b", "var4", 
                          "var5", "var1", "var2", "var7"))

   df  vars
1   1  var1
2   1  var2
3   1  var3
4   1  var4
5   2  var1
6   2 var1b
7   2  var4
8   3  var5
9   3  var1
10  3  var2
11  3  var7


我的目标是要有一个这样的概览表(值并不完全是上面的值),其中1表示包含变量,而2表示变量未包含在相应的数据帧df1中到df3

df %>% pivot_wider(names_from = df, values_from = ??)
          df1          df2          df3
_________________________________________________________________
var1        1            0            0
var1b       1            1            0
var2        1            1            1
var3        0            1            1
var4        0            0            1
var7        0            0            1

2 个答案:

答案 0 :(得分:5)

只需:

t(table(df))

甚至

 table(rev(df))

甚至

xtabs(~vars+df, df)

如果需要返回数据框:

as.data.frame.matrix(t(table(df)))
      1 2 3
var1  1 1 1
var1b 0 1 0
var2  1 0 1
var3  1 0 0
var4  1 1 0
var5  0 0 1
var7  0 0 1

答案 1 :(得分:3)

这项工作:

library(dplyr)
library(tidyr)
library(tibble)
df %>% group_by(df, vars) %>% 
  mutate(c = n()) %>% 
  pivot_wider(id_cols = vars, names_from = df, names_prefix = 'df', values_from = c, values_fill = 0) %>% 
  column_to_rownames('vars')
      df1 df2 df3
var1    1   1   1
var2    1   0   1
var3    1   0   0
var4    1   1   0
var1b   0   1   0
var5    0   0   1
var7    0   0   1
>