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