为什么`[< -`不能重新排序数据框列?

时间:2016-09-22 15:41:09

标签: r

为什么这不起作用?

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

2 个答案:

答案 0 :(得分:6)

提取完成后,索引中的值将被替换而不是名称。例如,替换下面的第一项不会影响元素的名称:

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

在数据框中,您以相同的方式替换了值。值已更改但名称保持不变。要重新排序数据框,请避免使用提取框架。

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

答案 1 :(得分: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

如果你质疑为什么,Pierre Lafortune的评论是正确的。

作为附注,我还想将commat添加到单独的维度:

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

我发现它更合适。