R语言 | 多组样本的N种组合
R语言 | NA值替换的N种方法
数据挖掘 | ID转换的N种方法

我们在文章 数据挖掘 | 快速实现生存分析森林图 中讲到,可以将原数据中对于性别的0/1标识转换为female/male以方便在森林图中的展示,其中提到的方法如下:
sex = factor(sex, levels = c(0,1), labels = c("female", "male"))
是在将sex变量转化为因子型的同时,将其0和1分别标识为female和male,而本文将讨论对因子型数据内容修改的N种方法!
使用测试数据iris:
data(iris)
str(iris) # 查看数据内容
可见,物种(Species)列是因子型(Factor)数据,3个组别(levels)分别为:setosa、versicolor和virginica:
levels(iris$Species) # 提取因子的levels
返回:
[1] "setosa" "versicolor" "virginica"
N种方法开始...
方法1:参考前文,如果现在想将类别名称对应改为0,2,1,可执行如下命令:
iris$Species = factor(iris$Species, levels = c("setosa", "versicolor", "virginica"), labels = c(0, 2, 1))
完成更改("setosa" -> 0, "versicolor" -> 2, "virginica" -> 1):
注意,levels的顺序并非数值顺序,而是按照设置的顺序!
方法2:方法1的最外层有个转换为因子型数据的操作 factor()
,由于其本身已经是因子型,故多余,可直接通过 levels()
更改:
levels(iris$Species) = c("versicolor", "virginica", "setosa")
抛出问题:由方法1中得到的1会被替换成什么?
答:(0 -> "versicolor", 2 -> "virginica", 1 -> "setosa")
方法3:方法2种是按levels顺序依次替换,而方法1则可以根据需求自定义替换规则,当然方法1更为灵活,且不需要事先知道levels的顺序即可完成更改,值得借鉴:
p_load(forcats)
fct_recode(iris$Species, "0" = "virginica", "1" = "versicolor", "2" = "setosa")
注意!forcats包中的函数 fct_recode()
设置替换规则时被替换的原始内容在等号后面,新的内容再等号之前,如果是数值需要加引号,字符串则不需要:
the name gives the new level, and the value gives the old level.
故,如果被替换内容再原levels中不存在,则报错:
fct_recode(iris$Species, virginica = "a")
Warning message: Unknown levels in
f
: a
另, fct_recode()
并不会改变原变量。故如果想在原变量的基础上修改,则需要重新赋值:
iris$Species = fct_recode(iris$Species, "0" = "virginica", "1" = "versicolor", "2" = "setosa")
此时...
方法4、直接使用 levels()
在原因子型变量上直接修改反而显得更便捷:
levels(iris$Species) = list(no = "0", yes = "1", unknow = "2")
同理,被替换的原始内容在等号后面,新的内容再等号之前!
方法5:不过,tidytidbits包中的 rename_factor()
函数倒是支持更舒服的书写方式,将原始内容在等号后面:
p_load(tidytidbits)
rename_factor(iris$Species, no = "setosa", yes = "versicolor", unknow = "virginica"))
方法6-7:类似的,格式不同的还有plyr包中的 revalue()
和 mapvalues()
等函数:
p_load(plyr)
revalue(iris$Species, c(no = "setosa", yes = "versicolor", unknow = "virginica"))
mapvalues(iris$Species, c("no", "yes", "unknow"), c("setosa", "versicolor", "virginica"))
方法8:既然我们总是在说替换,那么怎么能少得了 R中强大的替换操作!

R语言·往期精彩
R语言 | 从火山图说起-条件判断语句
R绘图 | 差点又错过一个隐蔽且致命的错误
R语言 | 更快的表格文件读取方法!
R语言 | 数据如何高效输出到文件中?
如期而至的最新版R语言!
R语言 | 你知道自己的Bioconductor版本么?
R语言 | 多组样本的N种组合
绘图专题 | ggsci发表级配色
最后
以上就是灵巧小甜瓜最近收集整理的关于r语言 第n行第n列_R语言 | 从森林图说起修改因子型数据的N种方法的全部内容,更多相关r语言内容请搜索靠谱客的其他文章。
发表评论 取消回复