假设我有一个data.frame,就像这样:
x <- c(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10)
df <- data.frame("Label 1"=x,"Label 2"=rnorm(100))
头(DF,3)
返回:
Label.1 Label.2
1 1 1.9825458
2 2 -0.4515584
3 3 0.6397516
如何让R停止使用列名中的句点自动替换空格?即“标签1”而不是“Label.1”。
答案 0 :(得分:57)
您可以在check.names = FALSE
(以及data.frame
)中设置read.table
:
df <- data.frame("Label 1" = 1:3, "Label 2" = rnorm(3), check.names = FALSE)
返回:
Label 1 Label 2
1 1 0.2013347
2 2 1.8823111
3 3 -0.5233811
来自?data.frame
:
check.names
逻辑。如果TRUE
则检查数据框中变量的名称,以确保它们在语法上是有效的变量名,并且不会重复。如有必要,可以调整它们(make.names
),以便它们可以。
来自?make.names
:
语法上有效的名称由字母,数字和点或下划线字符组成,以字母或点开头,后面没有数字。诸如“.2way”之类的名称无效,保留字也不是。
所有无效字符都会翻译为“
.
”
此外,如果您需要使用$
使用“无效”名称对变量进行子集,则可以使用反引号`
。例如:
df$`Label 1`
答案 1 :(得分:8)
你没有。
使用您想要的空间格式将无法满足使用df$column.1
时无法处理的标识符的要求 - 无法处理空间。因此,请参阅make.names()
函数以获取详细信息或示例:
> make.names(c("Foo Bar", "tic tac"))
[1] "Foo.Bar" "tic.tac"
>
答案 2 :(得分:5)
您可以更改现有数据框名称以包含空格,例如使用您的示例
x <- c(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10)
df <- data.frame("Label 1"=x,"Label 2"=rnorm(100))
colnames(df) <- c("Label 1", "Label 2")
head(df, 3)
返回
Label 1 Label 2
1 1 0.2013347
2 2 1.8823111
3 3 -0.5233811
你仍然可以使用$运算符访问列,你只需要使用双引号,例如
df$"Label 2"[1:3]
返回
[1] 0.2013347 1.8823111 -0.5233811
在创建data.frame时自动转换列名称似乎相当不一致,但在列名更改期间不要执行相同的操作,但这就是R目前的工作方式。
答案 3 :(得分:0)
names(df)<-c('Label 1','Label 2)