R语言table转dataframe禁用因子但stringsAsFactors无效如何解决
R语言table对象转dataframe时禁用字符转因子的解决方案
问题根因
你传入data.frame()的对象是table类型,R会优先调用as.data.frame.table()方法完成table到数据框的预转换,这个方法默认将table的行、列名称转为因子类型,你在data.frame()中传入的stringsAsFactors=F是作用于预转换后的数据框,无法影响前置的table转数据框逻辑,因此不生效。
可用解决方案
- 方案一:直接使用
as.data.frame()处理table对象,指定不转因子
# 直接对table调用as.data.frame,传入stringsAsFactors参数 df <- as.data.frame(t, stringsAsFactors = FALSE) class(df$Var1) # 输出:[1] "character"
注:如果你使用的是R 4.0及以上版本,全局默认stringsAsFactors = FALSE,不需要额外传参,直接写df <- as.data.frame(t)即可。
- 方案二:先转矩阵再转数据框
先将table转为矩阵,矩阵的行列名会保留字符属性,再转数据框即可:
df <- as.data.frame(as.table(as.matrix(t)), stringsAsFactors = FALSE)
- 方案三:已生成带因子列的数据框时,手动转换
如果已经完成了转换操作,可单独将因子列转为字符类型:
df$Var1 <- as.character(df$Var1) df$Var2 <- as.character(df$Var2)
内容的提问来源于stack exchange,提问作者syre
相关产品推荐
相关产品推荐

