分类变量中的数学运算符

R18*_*R18 5 r categories

在我的数据框中,我有一个具有以下类别的变量:A1, A2, A3, 。。。B1, B2, B3, . 。。Z1, Z2, Z3.

虽然变量不是数字,但我们可以根据字母和数字定义它们之间的逻辑顺序(上面描述的类别的顺序)。


我的问题是:

我们可以对这种类型的变量使用<,=和运算符吗?>

例如,如果我想选择值介于var1和 之间的A1G3。我们可以使用类似的东西df[df$var1>="A1" & df$var1<="G3",]吗?

我在 STATA 中看到了类似的代码,我想知道是否可以在 R 中做类似的事情。提前致谢。

Sam*_*amR 5

是的,您可以使用有序因子。来自文档

如果参数orderedTRUE,则假定因子水平是有序的。

fct_levels = c("Python", "Julia", "R")

df  <- data.frame(
    var1 = factor("R", levels = fct_levels, ordered = TRUE),
    var2 = factor("Python", levels = fct_levels, ordered = TRUE)
)

df
#   var1   var2
# 1    R Python

df$var1
# Levels: Python < Julia < R

with(df, var1 > var2) # TRUE
with(df, var2 > var1) # FALSE
Run Code Online (Sandbox Code Playgroud)

请注意,您可以在ordered = TRUE不设置levels参数的情况下进行设置,在这种情况下您将获得字母顺序。

factor(c("Python", "Julia", "R"), ordered = TRUE)
# [1] Python Julia  R     
# Levels: Julia < Python < R
Run Code Online (Sandbox Code Playgroud)

值得庆幸的是,R 不会让你将其与df$var1.

关于建模的注意事项

请注意文档中的警告:

有序因子与因子仅在类别上有所不同,但方法和模型拟合函数对这两个类别的处理方式截然不同。

具体来说,这与是否使用正交多项式或治疗对比有关。您可以在 R 中有序因子变量和无序因子变量之间的差异中阅读更多相关信息。