【问题标题】:How to rearrange columns of dataframe using variables as column index如何使用变量作为列索引重新排列数据框的列
【发布时间】:2020-09-08 09:09:59
【问题描述】:

我正在尝试通过使用变量作为列索引而不是列名或硬编码列位置来重新排列数据框的列,但我无法这样做。

例如,如果我有一个名为“test”的数据框,它有 12 行和 7 列,如下所示:-

数据框中的值只是随机数。数据框的结构是这样的:-

str(allmodifiedwthhistdatareccountdf)
Classes ‘data.table’ and 'data.frame':  12 obs. of  7 variables:
 $ wthmsngfixedupdf: int  44640 44640 44640 44640 44640 44640 44640 44640 44640 44640 ...
 $ wthlgddf        : int  44640 44640 44640 44640 44640 44640 44640 44640 44640 44640 ...
 $ wthlgdrcncydf   : int  44640 44640 44640 44640 44640 44640 44640 44640 44640 44640 ...
 $ landrmwdf       : int  44640 44640 44640 44640 44640 44640 44640 44640 44640 44640 ...
 $ trenddf         : int  44640 44640 44640 44640 44640 44640 44640 44640 44640 44640 ...
 $ excldatesdf     : int  44640 44640 44640 44640 44640 44640 44640 44640 44640 44640 ...
 $ FcstID          : int  1 2 3 4 5 6 7 8 9 10 ...
 - attr(*, ".internal.selfref")=<externalptr> 

请忽略结构输出中显示的值,因为它们是为了方便而放入的一些值。

我想将 FcstID 列作为第一列。我正在这样做,但它不起作用:-

test[, c(ncol(test), 1:(ncol(test) - 1))]

想出了一些奇怪的东西。

但这似乎可行:-

test[, c(7, 1:6)]

但这不是

test[c(7, 1:6)]

有什么建议吗?我做错了什么?

【问题讨论】:

  • 如果test[, c(7, 1:6)] 有效,我不明白你想要什么?这是一个解决方案。

标签: r


【解决方案1】:

从结构看来你有一个data.table。要按编号重新排序列,请使用setcolorder。

看这个例子-

library(data.table)
df <- mtcars[1:7, 1:7]
setDT(df)  
df

#    mpg cyl disp  hp drat    wt  qsec
#1: 21.0   6  160 110 3.90 2.620 16.46
#2: 21.0   6  160 110 3.90 2.875 17.02
#3: 22.8   4  108  93 3.85 2.320 18.61
#4: 21.4   6  258 110 3.08 3.215 19.44
#5: 18.7   8  360 175 3.15 3.440 17.02
#6: 18.1   6  225 105 2.76 3.460 20.22
#7: 14.3   8  360 245 3.21 3.570 15.84

setcolorder(df, c(ncol(df), 1:(ncol(df) - 1)))
df
#    qsec  mpg cyl disp  hp drat    wt
#1: 16.46 21.0   6  160 110 3.90 2.620
#2: 17.02 21.0   6  160 110 3.90 2.875
#3: 18.61 22.8   4  108  93 3.85 2.320
#4: 19.44 21.4   6  258 110 3.08 3.215
#5: 17.02 18.7   8  360 175 3.15 3.440
#6: 20.22 18.1   6  225 105 2.76 3.460
#7: 15.84 14.3   8  360 245 3.21 3.570
 

【讨论】:

  • Iago
  • @DeepakAgarwal 因为数据框和数据表不同。并非所有适用于数据框的东西都适用于数据表,反之亦然。所以我们需要根据我们拥有的类型来使用语法。
  • Ronak
  • 这就是 data.table 始终显示类的方式,但这并不意味着它应该适用于两者。
猜你喜欢
  • 2019-12-20
  • 1970-01-01
  • 2014-06-23
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多