сумма несоответствий в сравнении столбцов - PullRequest
0 голосов
/ 28 мая 2018

Я довольно новичок в программировании на R, и у меня возникли некоторые трудности с ДРУГИМ этапом моего проекта.Я даже не уверен в этом, правильно ли я задаю вопрос.У меня есть данные фактических и прогнозируемых значений:

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

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно создать вектор несоответствий между фактическим значением и каждым из четырех прогнозируемых значений.Это должно привести к одному вектору: c (2,1,2,4)

Я пытаюсь использовать логическую маску для суммирования по ИСТИННЫМ значениям ... но что-то не работает правильно.Мне нужно сделать эту сумму для каждого из четырех предсказанных значений для сравнения фактических значений.

discordant_sums(df[,seq(1,ncol(df),2)]!=,df[,seq(2,ncol(df),2)])

Любые предложения будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вы можете использовать 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)
0 голосов
/ 28 мая 2018

Мы можем скопировать первый столбец, чтобы сделать равными длины между объектами сравнения и выполнить 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))
...