2017-08-10 69 views
0

我是新来的R最高计数投票, 有一个数据帧说的数据,看起来像这样:比较的数据帧值r和给予取决于

data <- data.frame(
    predicted = c(15, 15, 15, 8, 15), 
    actual = c(18, 18, 16, 6, 18) 
) 

我需要检查的数量时间的实际价值,说18已经预测15,也已经预测了15,15并且根据预测的计数,我可以说最好称18 a 15为预测计数,越高越好。我在excel中尝试过,但是对于记录来说它太多了,在R中做任何方法,我知道它只是一个countif,但不能超越循环来迭代数据帧。任何帮助将非常感激。

回答

1

我们可以用table找到频率

table(data)["15",] 
+0

感谢您的及时答复,但它不会工作,考虑我的数据框与列预测和实际,以及我上面提到的值,现在,我需要知道已预测什么值的实际值的计数。说18是实际的,它被预测15 3次和13次一次,因此看到这个计数我可以推断出18应该被预测为15.还有其他值,从1到20开始预测,类似于实际。这些是已经给出的标签。 – krits

0

@akrun是正确的,table()会给你你想要的信息。

counts <- table(data) 
counts 
#   actual 
# predicted 6 16 18 
#  8 1 0 0 
#  15 0 1 3 

所以你可以看到什么时候15被预测,18是最常见的实际值。要获得每个预测的最常见实际值,可以使用apply()查找每行的最高值。

winners <- apply(counts, MARGIN = 1, FUN = which.max) 
winners 
# 8 15 
# 1 3 

which.max()函数返回值最高的指数,因为我们按行应用它,这将是列数。因此,现在您可以使用该信息将预测的映射存储到data.frame中。

prediction_map <- data.frame(
    from = as.integer(rownames(counts)), 
    to = as.integer(colnames(counts)[winners]) 
) 
prediction_map 
# from to 
# 1 8 6 
# 2 15 18 

行列名称是字符向量,所以它们必须转换为整数。

+0

非常感谢你@Nathan和akrun。感谢你的帮助。 – krits