我的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
答案 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
>