列与列比较中的总和不匹配

时间:2018-05-28 08:13:19

标签: r comparison match

我对R编程很陌生,并且在我的项目的另一步中遇到了一些困难。如果我正确地问这个问题,我现在还不确定。我有一个实际值和预测值的数据框:

Wait

我遇到的问题是我需要在实际值和四个预测值中的每一个之间创建一个不匹配的向量。这应该产生一个向量:c(2,1,2,4)

我正在尝试使用布尔掩码来总结TRUE值...但是有些东西不能正常工作。我需要对四个预测值中的每一个进行实际值比较。

actual  predicted.1 predicted.2 predicted.3 predicted.4
a   a   a   a   a
a   a   a   b   b
b   b   a   b   b
b   a   b   b   c
c   c   c   c   c
c   d   c   c   d
d   d   d   c   d
d   d   d   d   a

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我们可以复制第一列以使比较对象之间的长度相等并执行colSums

as.vector(colSums(df[,1][row(df[-1])] != df[-1]))
#[1] 2 1 2 4

数据

df <- structure(list(actual = c("a", "a", "b", "b", "c", "c", "d", 
"d"), predicted.1 = c("a", "a", "b", "a", "c", "d", "d", "d"), 
    predicted.2 = c("a", "a", "a", "b", "c", "c", "d", "d"), 
    predicted.3 = c("a", "b", "b", "b", "c", "c", "c", "d"), 
    predicted.4 = c("a", "b", "b", "c", "c", "d", "d", "a")),
  .Names = c("actual", 
"predicted.1", "predicted.2", "predicted.3", "predicted.4"), 
  class = "data.frame", row.names = c(NA, 
-8L))

答案 1 :(得分:1)

您可以使用apply将第1列中的值与所有其他列中的值进行比较。

apply(df[-1], 2, function(x)sum(df[1]!=x))

# predicted.1 predicted.2 predicted.3 predicted.4 
# 2           1           2           4 

数据:

df <- read.table(text = 
"actual  predicted.1 predicted.2 predicted.3 predicted.4
a   a   a   a   a
a   a   a   b   b
b   b   a   b   b
b   a   b   b   c
c   c   c   c   c
c   d   c   c   d
d   d   d   c   d
d   d   d   d   a",
header = TRUE, stringsAsFactors = FALSE)