R自动计算多个变量和多个子集的值

R automatically counting values for multiple variables and multiple subsets

我有一个数据集,我想在其中计算多个子集的多个变量的出现次数。理想情况下,这将是自动的。

我的数据集看起来有点像这样:

var1 <- c("Checked", "Checked", "Unchecked")
var2 <- c("Unchecked", "Checked", "Unchecked")
var3 <- c("Checked", "Unchecked", "Unchecked")

varA <- c("Unchecked", "Checked", "Checked")
varB <- c("Unchecked", "Checked", "Checked")
varC <- c("Checked", "Unchecked", "Checked")


dummy <- cbind(var1,var2,var3,varA,varB,varC) 

对于选中 var1 的每个人,我想计算一下 varA、varB 和 varC 的“选中”框的数量。 var2 和 var3 相同。

理想的最终结果是一个看起来有点像这样的数据框:其中行表示子集,行分别表示 varA、varB 和 varC 的“已检查”计数。

        varA   varB  varC
var1      1     1     1
var2      1     1     0
var3      0     0     1

能够轻松将其转换为比例的奖励积分(eta:选中与未选中)!

我发现我应该将“选中”“未选中”转换为 0 和 1,这些应该(转换为)数字:

dummy[dummy == "Checked"] <- 1
dummy[dummy == "Unchecked"] <- 0

dummy <- as.data.frame(apply(dummy, 2, as.numeric))

假人现在看起来像这样,到目前为止还不错。

  var1 var2 var3 varA varB varC
1    1    0    1    0    0    1
2    1    1    0    1    1    0
3    0    0    0    1    1    1

但是,现在我卡住了。我当然可以使用 subset 函数手动计算列的总和 4:6 并将所有这些都编译到一个新的数据框中,但是由于我的真实数据集有更多的变量和子集,所以这不是一个理想的解决方案。

谢谢!这里是第一个 Q,所以我尽量做到精确,但如果需要会微调 Q :)

你可以这样做:

dummy <- data.frame(var1,var2,var3,varA,varB,varC)

dummy %>%
  pivot_longer(cols = matches('\d$')) %>%
  group_by(name) %>%
  summarize(across(starts_with('var'), ~sum(. == 'Checked' & value == 'Checked')))

# A tibble: 3 x 4
  name   varA  varB  varC
  <chr> <int> <int> <int>
1 var1      1     1     1
2 var2      1     1     0
3 var3      0     0     1