在我的数据框中,我有一个具有以下类别的变量:A1, A2, A3, 。。。B1, B2, B3, . 。。Z1, Z2, Z3.
虽然变量不是数字,但我们可以根据字母和数字定义它们之间的逻辑顺序(上面描述的类别的顺序)。
我的问题是:
我们可以对这种类型的变量使用<,=和运算符吗?>
例如,如果我想选择值介于var1和 之间的A1行G3。我们可以使用类似的东西df[df$var1>="A1" & df$var1<="G3",]吗?
我在 STATA 中看到了类似的代码,我想知道是否可以在 R 中做类似的事情。提前致谢。
是的,您可以使用有序因子。来自文档:
如果参数
ordered为TRUE,则假定因子水平是有序的。
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 中有序因子变量和无序因子变量之间的差异中阅读更多相关信息。