R语言中c(...)为何返回数字而非字符串?如何生成目标向量?
为什么用
c()合并因子返回数字而非字符串? 嘿,这个问题我太熟悉了!咱们一步步来拆解:
问题根源:你操作的是**因子(factor)**类型
你看到的Location$NamePrint和ParentLocation$NamePrint都是R里的因子类型——这种数据类型看起来像字符串,但底层是用整数存储的,那些数字就是它们在因子水平(Levels)里的位置:
- 数字36对应
Levels里第36个元素,也就是"Burundi" - 数字71对应
Levels里第71个元素,也就是"Eastern Africa"
当你用c()直接合并两个因子时,R会默认提取它们底层的整数值,而不是显示表面的字符串,所以就返回了[1] 36 71。
解决办法:先转成字符型再合并
要得到包含两个字符串值的向量,只需要先把因子转换成字符类型,再用c()合并:
c(as.character(Location$NamePrint), as.character(ParentLocation$NamePrint))
执行后就会返回:
[1] "Burundi" "Eastern Africa"
额外小技巧
如果你后续还需要把结果当作因子使用,可以合并后再转回因子:
factor(c(as.character(Location$NamePrint), as.character(ParentLocation$NamePrint)))
另外,如果你的数据是通过read.table/read.csv导入的,在R版本4.0之前,默认会把字符串列转成因子。如果不想遇到这种问题,可以在导入时加上参数:
read.csv("your_file.csv", stringsAsFactors = FALSE)
(R 4.0及以上版本已经默认stringsAsFactors = FALSE,所以不用额外设置啦)
内容的提问来源于stack exchange,提问作者igorjrr
相关产品推荐
相关产品推荐

