R: Как умножить коэффициент чисел на константу - PullRequest
1 голос
/ 09 апреля 2020

После запуска модели knn следующим образом: pred_norm <- knn(train_norm, test_norm, cl = train_norm$ef_scale, k = k)

Я пытаюсь создать таблицу результатов вывода, например, так: tab_norm <- table(pred_norm, 5*test_norm$ef_scale)

Я умножил 5 * test_norm, потому что перед нормализацией данные были нормализованы, а исходными данными для этого столбца были целые числа 0-5. Это произвело эту таблицу:

pred_norm    0    1    2    3    4    5
      0   5249    0    0    0    0    0
      0.2   38 3897  136    1    0    0
      0.4    0    0 1523  257    1    0
      0.6    0    0    0  211   72    0
      0.8    0    0    0    0    5    6
      1      0    0    0    0    0    0

Это преобразовало нормализованные 0, 0.2, ..., 1 обратно в исходные 0-5, но когда я попытался умножить pred_norm, используя 5 * таким же образом, Я получил это предупреждение:

В Ops.factor (5, pred_norm): '*' не имеет значения для факторов.

Я пытался использовать pred_norm <- as.numeric(pred_norm) для преобразования это целое число, и оно позволило мне преобразовать числа, но оно опустило 0 и переместило все строки на одну, объединяя 4 и 5 в один ряд. То же самое произошло, когда я попытался использовать pred_norm <- as.integer(pred_norm)

Обе эти таблицы дали такие таблицы:

pred_norm    0    1    2    3    4    5
        1 5249    0    0    0    0    0
        2   38 3897  136    1    0    0
        3    0    0 1523  257    1    0
        4    0    0    0  211   72    0
        5    0    0    0    0    5    6

У кого-нибудь есть предложения, как мне преобразовать pred_norm, чтобы он будет 0-5 вместо десятичных от 0-1 или целых от 1-5?

1 Ответ

1 голос
/ 09 апреля 2020

Может быть, вы можете попробовать as.character + as.numeric, как показано ниже

df$pred_norm <- as.numeric(as.character(df$pred_norm))*5

или levels + as.numeric

df$pred_norm <- as.numeric(levels(df$pred_norm)[df$pred_norm])*5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...