2016-09-22 3 views
7

なぜこれは機能しませんか?なぜ[[< - `はデータフレーム列を並べ替えることができませんか?

df <- data.frame(x=1:2, y = 3:4, z = 5:6) 
df[] <- df[c("z", "y", "x")] 
df 
#> x y z 
#> 1 5 3 1 
#> 2 6 4 2 

名前が元の順序であるが、データ自体の順序が変更されていることに注意してください。

これは、抽出は名前ではない置き換えられたインデックスの値を完了すると

df <- data.frame(x=1:2, y = 3:4, z = 5:6) 
df[c("z", "y", "x")] 
#> z y x 
#> 1 5 3 1 
#> 2 6 4 2 
+1

実際に動作しました。あなたはRに、名前ではなく値を置き換えるように頼んだら –

+0

'' debugonce( '[< - 。data.frame'); df [] < - df [c(" z "、" y "、" x ") ] ''何が起こっているかを見る。デバッガでコードをステップ実行することができます。 – cryo111

答えて

6

だけで正常に動作します。たとえば、以下の最初の項目を置き換えても、要素の名前には影響しません。

x <- c(a=1, b=2) 
x[1] <- 3 
x 
a b 
3 2 

データフレームでは、同じ方法で値を置き換えました。値は変更されましたが、名前は一定のままでした。データフレームを並べ替えるには、抽出フレームワークを避けます。

df <- df[c("z", "y", "x")] 
+0

同様に、値だけが置き換えられるというより直接的な確認のために、 'df < - data.frame(a = 2、b = 3);を試してください。 dd < - data.frame(AA = 4、BB = 5)。 df [] < - dd; df'となる。 –

0

ただDFの後に[]をつけていないとあなたが望むように、行います...

df <- data.frame(x=1:2, y = 3:4, z = 5:6) 
df <- df[c("z", "y", "x")] 
df 
# z y x 
#1 5 3 1 
#2 6 4 2 

そして、あなたが質問あればピエールLafortuneのコメントは右である理由、についてです。サイドノートとして

、私はまた別の次元に登録商標を追加したい:

df <- df[,c("z", "y", "x")] 

は、私はそれがより適切見つけます。

関連する問題