将dbl舍入为最接近的整数,并转换为R中的有序因子

  • 本文关键字:转换 舍入 dbl 最接近 整数 r
  • 更新时间 :
  • 英文 :


我在数据帧中有一个数字列,我想将其四舍五入到最接近的整数,然后转换为有序因子。这看起来相当直接,但我不明白为什么这没有像预期的那样奏效。

# 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.后,我仍然得到了同样的结果

我做错了什么?

这是因为您向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

最新更新