Округлить dbl до ближайшего целого числа и преобразовать в упорядоченный коэффициент в R - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть числовой столбец внутри фрейма данных, который я хочу округлить до ближайшего целого числа, а затем преобразовать в упорядоченный коэффициент. Это кажется довольно прямым, но я не могу понять, почему это не работает, как ожидалось.

# example data
tmp <- structure(list(variable1 = c(X1 = 3.66666666666667, X2 = 2.66666666666667, 
                                    X3 = 3.33333333333333, X4 = 3, X5 = 2, X6 = 2, X7 = NA, X8 = 3.33333333333333, 
                                    X9 = 2.66666666666667, X10 = 4, X11 = 3.66666666666667, X12 = 3, 
                                    X13 = 3.66666666666667, X14 = 3.33333333333333, X15 = 3.33333333333333, 
                                    X16 = 4, X17 = 3.33333333333333, X18 = 3, X19 = 3, X20 = 3, X21 = 3, 
                                    X22 = 3.33333333333333, X23 = 3.33333333333333, X24 = 2.66666666666667, 
                                    X25 = 2, X26 = 3.33333333333333, X27 = 3, X28 = 3, X29 = 2.66666666666667)), 
                 class = c("tbl_df", "tbl", "data.frame"), 
                 row.names = c(NA, -29L))

# round to the nearest integer
scores <- round(tmp, digits = 0)

# convert to an ordered factor
factors <-
  ordered(
    scores,
    levels = c(1, 2, 3, 4),
    labels = c("Strongly Disagree", "Disagree", "Agree", "Strongly Agree")
  )

Этот код возвращает следующее:

variable1 
     <NA> 
Levels: Strongly Disagree < Disagree < Agree < Strongly Agree

Я думал, что это из-за NA в моем наборе данных, но я все равно получаю то же самое после пропуска NA.

Что я делаю не так?

1 Ответ

0 голосов
/ 11 ноября 2018

Это потому, что вы передаете фрейм данных, а не вектор, в ordered():

str(scores)
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 29 obs. of  1 variable:
# $ variable1: num  4 3 3 3 2 2 NA 3 3 4 ...

Но ordered() нужен вектор:

заказано (x, ...)

x: вектор данных, обычно занимающий небольшое количество различных значения.

Вместо этого используйте scores$variable1:

factors <-
  ordered(
    scores$variable1,
    levels = c(1, 2, 3, 4),
    labels = c("Strongly Disagree", "Disagree", "Agree", "Strongly Agree")
  )


factors
# [1] Strongly Agree Agree          Agree          Agree          Disagree      
# [6] Disagree       <NA>           Agree          Agree          Strongly Agree
# [11] Strongly Agree Agree          Strongly Agree Agree          Agree         
# [16] Strongly Agree Agree          Agree          Agree          Agree         
# [21] Agree          Agree          Agree          Agree          Disagree      
# [26] Agree          Agree          Agree          Agree         
# Levels: Strongly Disagree < Disagree < Agree < Strongly Agree
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...