使用列值作为列名来创建交叉表

Use column value as column name to create a cross-tab

我有一个很长的 table 行组,看起来像这样。本质上,我想使用 v1 中存储的值来重命名 v1_hasvalue,同样地 v2.

v1 <- rep(c("varA"), 4)
v2 <- rep(c("varB"), 4)
v1_hasvalue <- c(1,1,0,0)
v2_hasvalue <- c(1,0,1,0)
n <- c(100, 20, 30, 40)

have <- data.frame(v1, v2, v1_hasvalue, v2_hasvalue, n)

我该怎么做:

  v1 v2 v1_hasvalue v2_hasvalue   n
1  A  B           1           1 100
2  A  B           1           0  20
3  A  B           0           1  30
4  A  B           0           0  40

对此:

  varA varB   n
1    1    1 100
2    1    0  20
3    0    1  30
4    0    0  40

我们可以将列重命名为

names(have)[3:4] <- unlist(have[1, 1:2])
have <- have[-(1:2)]

-输出

> have
  varA varB   n
1    1    1 100
2    1    0  20
3    0    1  30
4    0    0  40