R语言中head(tray)与colnames(tray)列名显示不一致问题咨询
R数据框colnames与head展示列名不一致的原因
导致该问题的常见原因有三类:
- 对象为data.table类型,修改列名的方法不匹配
data.table自定义了专属的列名修改逻辑,如果你直接使用基础R的colnames(tray)[17] <- "linearcorrect"语法修改列名,只会更新对象表层的names属性,不会同步data.table内部存储的列名缓存,最终colnames()返回更新后的值,但调用head()触发data.table专属打印逻辑时,读取的还是旧的缓存列名。
解决方法:改用data.table官方推荐的setnames()函数修改列名:setnames(tray, old = 17, new = "linearcorrect") - 数据框绑定了列标签属性
如果你是从SPSS、Stata等统计软件导入的数据,或者使用Hmisc等包给列加了自定义标签,R的打印方法默认会优先展示列标签而非正式列名。colnames()返回的是正式列名,自然会和打印出来的标签不一致。
解决方法:打印时指定不展示标签,或者直接移除列的标签属性:# 打印时不显示标签 print(head(tray), labels = FALSE) - 控制台缓存了旧的输出结果
如果你在修改列名之前已经运行过head(tray),可能你看到的打印结果是修改之前的旧缓存,并非修改后的真实输出。
解决方法:清空控制台后重新依次执行修改列名、查询列名、打印head的三步代码,确认结果是否一致。
内容的提问来源于stack exchange,提问作者Andi Noakes
相关产品推荐
相关产品推荐

