read.table导入CSV时表头%与/被替换为.的原因咨询
解决read.table导入CSV时表头特殊符号被替换的问题
嘿,我来帮你搞清楚这个事儿!你遇到的%、/被替换成点号的情况,其实是R的默认规则在起作用——因为R对合法变量名有严格要求。
为什么符号会被替换?
在R里,变量名只能包含字母、数字、下划线(_)和点号(.),而且不能以数字开头。像%、/这类符号都属于非法的变量名字符,所以read.table默认会调用make.names()函数自动处理表头,把所有非法字符替换成点号,确保生成的列名能作为合法变量名被直接调用。
怎么保留原始表头?
如果想要保留表头里的%、/这些符号,只需要在read.table里加上check.names = FALSE参数就行,这样就会跳过自动处理表头的步骤:
read.table(text = "Subject,Exp1_BSL_SDNN,Exp1_BSL_LF/HF,Exp1_BSL_%LF s1,123,123,123 s2,123,123,123", sep=",", header=TRUE, check.names = FALSE)
运行这段代码后,输出的列名就会是你原始的Exp1_BSL_LF/HF、Exp1_BSL_%LF啦!不过要注意,之后引用这些列的时候,得用反引号(`)把列名包起来,比如:
df <- read.table(...) # 上述完整代码 df$`Exp1_BSL_LF/HF` # 正确引用带特殊符号的列
不然直接写df$Exp1_BSL_LF/HF会报错,因为这不符合合法变量名的格式。
内容的提问来源于stack exchange,提问作者Robn
相关产品推荐
相关产品推荐

