谁能告诉我如何使用 if 和 if-else 语句适当地将选票分配给每个候选人?下面的命令正在计算选票的总和,我似乎无法弄清楚如何让 R 将每个候选人(特朗普和拜登)的选票分开。对不起,这样一个新手问题...
# Read CSV file
results <- read.csv("PRESIDENT_precinct_primary.csv")
View(results)
# Votes set to zero
Trump <- 0
Biden <- 0
n <- length(results)
for(i in 1:n){
if(results$candidate[i] == "DONALD J TRUMP"){
Trump <- sum(results$votes[i])
}
else if(results$candidate[i] == "JOSEPH R BIDEN"){
Biden <- sum(results$votes[i])
}
else{}
}
# Final Results
cat("Trump:", Trump)
cat("Biden:", Biden)
答案 0 :(得分:0)
问题之一在于“n”的值。它应该是“结果”的 nrow
而不是 length
,因为 length
与 ncol
({{ 1}} 返回 data.frame
)
read.csv
这样当我们遍历 data.frame
并提取 n <- nrow(results)
时,它提取列 'candidate' 的每个元素
接下来,问题是我们如何获取 1:n
并进行分配。 'Trump' 和 'Biden' 是在循环内创建的对象,它在每次迭代中都会更新,而 results$candidate[i]
没有做任何事情,因为只有一个元素 (sum
)。相反,我们可能需要一个 sum
操作,即添加 (results$votes[i]
) 并赋值给同一个对象(compound assignment
没有复合赋值运算符 +
)>
R
在+=
中,这些只是向量化操作,我们可以在没有任何循环的情况下进行
for(i in seq_len(n)) {
if(results$candidate[i] == "DONALD J TRUMP") {
Trump <- Trump + results$votes[i]
} else if(results$candidate[i] == "JOSEPH R BIDEN") {
Biden <- Biden + results$votes[i]
}
}
或者更简单的,它是一个分组操作
R
答案 1 :(得分:0)
不确定这个问题。如果你想分开投票,你可以这样做:
Biden = results[results$candidate == "JOSEPH R BIDEN", ]
特朗普也一样。
如果你想以另一种方式做同样的事情。
library(dplyr)
results %>% group_by(candidate) %>%
summarize(votes = sum(votes))