If 和 If else 语句问题

时间:2021-03-06 21:19:07

标签: r if-statement sum

谁能告诉我如何使用 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)

2 个答案:

答案 0 :(得分:0)

问题之一在于“n”的值。它应该是“结果”的 nrow 而不是 length,因为 lengthncol ({{ 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))