R语言:替换数据框列名中的点为下划线时出错,如何修正?
替换数据框列名中的点为下划线
问题重现
示例数据代码:
myheaders = c("3.1","3.2","3.3","3.4","3.5","3.6") mydata = c(2,0,3,1,1,4) example = as.data.frame(t(mydata)) colnames(example) <- myheaders example
运行输出:
> example 3.1 3.2 3.3 3.4 3.5 3.6 1 2 0 3 1 1 4
尝试的错误代码:
myoutput <- data.frame(lapply(example, function(x) {gsub(".", "_", x, fixed = TRUE)}))
错误输出:
> myoutput X3.1 X3.2 X3.3 X3.4 X3.5 X3.6 1 2 0 3 1 1 4
期望输出:
> myoutput 3_1 3_2 3_3 3_4 3_5 3_6 1 2 0 3 1 1 4
错误原因
- 代码逻辑偏差:
lapply(example, ...)是遍历数据框的列数据执行替换,而非操作列名,因此列名里的点完全没被处理。 - 自动列名修正:
data.frame()默认会给不符合R标准命名规则的列名(比如以数字开头、包含点号)添加X前缀,这就是出现X3.1的原因。
修正方案
方案1:直接修改列名(最简推荐)
无需处理列数据,直接对列名执行替换操作:
# 替换列名中的点为下划线 colnames(example) <- gsub(".", "_", colnames(example), fixed = TRUE) example
运行后即可得到期望输出。
方案2:保留自定义列名的完整流程
如果需要保留原数据框结构并手动控制列名,可以关闭data.frame()的列名检查,再修改列名:
# 转换时关闭列名自动修正,避免添加X前缀 myoutput <- data.frame(lapply(example, identity), check.names = FALSE) # 替换列名中的点为下划线 colnames(myoutput) <- gsub(".", "_", colnames(myoutput), fixed = TRUE) myoutput
注:这里用identity是因为你的列数据无需修改,仅需保留原结构。
内容的提问来源于stack exchange,提问作者Nereus
相关产品推荐
相关产品推荐

