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
我有一个数据集,我想在其中计算多个子集的多个变量的出现次数。理想情况下,这将是自动的。
我的数据集看起来有点像这样:
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