如何在读取数据时指定R语言中因子的水平顺序(而非事后修改)
在read.table中直接指定因子水平为数据出现顺序的方法
有两种常用方法可以在读取数据时直接设置因子水平为数据的出现顺序,无需事后修改:
方法1:自定义类并转换
通过定义一个自定义因子类,利用R的类型转换机制在读取时自动生成按出现顺序排列的因子:
# 定义自定义类型的转换规则 setAs("character", "factor_by_appearance", function(from) factor(from, levels = unique(from))) # 读取数据时指定自定义类 dat <- read.table(textConnection(" One Two D 1 B 2 A 3 C 4 "), header = TRUE, colClasses = c("factor_by_appearance", "integer")) # 查看结果 str(dat)
执行后str(dat)会显示One的水平为"D","B","A","C",符合需求。
方法2:利用colClasses结合匿名函数(R 4.0+支持)
在R 4.0及以上版本中,可直接在colClasses中使用函数处理列,无需提前定义转换规则:
dat <- read.table(textConnection(" One Two D 1 B 2 A 3 C 4 "), header = TRUE, colClasses = list( One = function(x) factor(x, levels = unique(x)), Two = "integer" )) str(dat)
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

