比较R中2个以上的向量(投票)

比较R中2个以上的向量(投票),r,R,我有5个向量,这些向量中的每一项都是“是”或“否” 所以我想比较这5个向量(一行一行),计算每一行的多数票,并将结果添加到一个新向量中。 我如何才能以有效的方式执行该操作 v1=c("yes","no","no","yes") v2=c("no","no","yes","yes") v3=c("yes","yes","no","yes") v4=c("yes","no","yes","yes") v5=c("yes","yes","yes","no") #The expected output

我有5个向量,这些向量中的每一项都是“是”或“否” 所以我想比较这5个向量(一行一行),计算每一行的多数票,并将结果添加到一个新向量中。 我如何才能以有效的方式执行该操作

v1=c("yes","no","no","yes")
v2=c("no","no","yes","yes")
v3=c("yes","yes","no","yes")
v4=c("yes","no","yes","yes")
v5=c("yes","yes","yes","no")
#The expected output is "yes", "no", "yes", "yes"

首先将数据放在基于字符的表格中:

dat <- data.frame( v1=c("yes","no","no","yes"),
                  v2=c("no","no","yes","yes"),
                  v3=c("yes","yes","no","yes"),
                  v4=c("yes","no","yes","yes"),
                  v5=c("yes","yes","yes","no"), stringsAsFactors=FALSE)

另一种方法是使用
mapply
=
返回一个比较真与假的矩阵,其中向量的元素等于某个值(这里是“是”)。然后,
rowMeans
计算行间的比例,
>0.5
检查多数。我们添加1以转换为数字位置,然后使用该位置从
c(“否”、“是”)
中的元素中进行选择

另一种使用矩阵乘法的方法是

c("no", "yes")[((do.call(cbind, myList) == "yes") %*%
               rep(1, length(myList)) > (length(myList) / 2)) + 1L]
[1] "yes" "no"  "yes" "yes"
请注意,首先将向量放入列表中,如下所示

数据

myList <- list(v1=c("yes","no","no","yes"),
               v2=c("no","no","yes","yes"),
               v3=c("yes","yes","no","yes"),
               v4=c("yes","no","yes","yes"),
               v5=c("yes","yes","yes","no"))

myList如果数据存储为因子,它也会起作用,就像“标准”data.frame一样
c("no", "yes")[((do.call(cbind, myList) == "yes") %*%
               rep(1, length(myList)) > (length(myList) / 2)) + 1L]
[1] "yes" "no"  "yes" "yes"
myList <- list(v1=c("yes","no","no","yes"),
               v2=c("no","no","yes","yes"),
               v3=c("yes","yes","no","yes"),
               v4=c("yes","no","yes","yes"),
               v5=c("yes","yes","yes","no"))