40

次のように、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))

head(df、3)

戻り値:

  Label.1    Label.2
1       1  1.9825458
2       2 -0.4515584
3       3  0.6397516

スペースを列名のピリオドに自動的に置き換えるのをRに停止させるにはどうすればよいですか?つまり、「Label.1」ではなく「Label1」です。

4

4 に答える 4

88

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`
于 2010-08-05T02:43:44.637 に答える
11

あなたはそうしない。

あなたが望むスペースでは、フォーマットはあなたが使用するときに再生されるようになる識別子の要件を満たさないでしょうdf$column.1-それはスペースに対処することができませんでした。したがってmake.names()、詳細または例については、関数を参照してください。

> make.names(c("Foo Bar", "tic tac"))
[1] "Foo.Bar" "tic.tac"  
>                                              

11年後の編集: 答えは、Rが列名を有効な変数名にすることを好むということです。ただし、Rは柔軟性があります。他の形式を使用できると主張する場合は、言語内で無効な列名を明示的に要求する必要があります。

> 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), check.names=FALSE)
> summary( df$`Label 2` )
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-2.2719 -0.7148 -0.0971 -0.0275  0.6559  2.5820 
> 

したがってcheck.names=FALSE、デフォルトの(そして賢明な)チェックをオーバーライドすると言うことで、識別子をバッククォートでラップすることで、列にアクセスできます。

于 2010-08-05T01:55:20.810 に答える
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が現時点でどのように機能するかです。

于 2010-08-05T02:24:59.133 に答える
1
names(df)<-c('Label 1','Label 2)
于 2019-02-13T16:28:17.280 に答える