在按字母顺序排列列之后,将特定列拉到开头

  • 本文关键字:开头 之后 顺序 排列 r
  • 更新时间 :
  • 英文 :


我在R中有一个数据帧。我按字母顺序排列列,如下所示:

df_ordered <- df[,order(names(df))]

现在,我想按名称选择一个特定的列(列名为"城市"),并将其"拉"到前面,同时保持其余列不变,即如果列为:

alpha, beta, city, delta

我希望他们是

city, alpha, beta, delta

谢谢你的帮助。

使用@nrussell sample Df data.frame,您也可以使用relevel

Df[, levels(relevel(factor(names(Df)),"G"))]

我们使用factor()的隐式排序,并使用relevel将特定列向前推。

这个怎么样:

Df <- data.frame(
  matrix(rnorm(52),
         ncol=26))
names(Df) <- LETTERS
##
Df <- Df[,c("C",sort(names(Df)[names(Df)!="C"]))]
##
> head(Df)
           C          A         B          D         E          F         G          H         I          J           K
1 -1.1685829 -1.0733238 0.1991507 -0.5315889  1.417376  0.3473343 0.8068851 -1.3548045 1.5587990  0.1617466 -0.02262477
2 -0.9241126 -0.3910728 1.6685727 -0.7506446 -1.275201 -0.1603301 0.9326244 -0.8349584 0.4534975 -0.3170741  0.63663999
          L           M          N         O          P          Q         R         S          T          U          V
1 0.9524257 -0.04871767 -0.8686760 -1.971867  2.0080797 -0.6866727 0.4532914 -0.328414 0.05844098  0.8595681  1.1198372
2 1.7291060  1.52756996  0.4328425  1.560806 -0.4236301 -1.1098159 0.3315950  1.328299 2.34595615 -0.3624254 -0.2300019
           W          X          Y          Z
1 -0.2515527 -0.2934354 -0.9494282 -0.9744378
2  1.0197277 -0.6822827 -1.0165435 -0.3204356

或者,如果您喜欢先对列进行排序,比如在您的示例中,则不需要sort

Df <- data.frame(
  matrix(rnorm(52),
         ncol=26))
names(Df) <- sample(LETTERS,26)
Df <- Df[,order(names(Df))]
Df <- Df[,c("C",names(Df)[names(Df)!="C"])]
##
> head(Df)
           C        A          B         D           E          F          G          H          I          J         K
1 -0.4508683 0.605652  1.0056819 0.3410927 -0.08246848  0.4173749  1.7259750  1.0860495 0.06465027 -1.5329574 0.1268806
2  0.5212941 1.264273 -0.3907112 0.4043759 -0.76360427 -0.7712454 -0.2604928 -0.8549233 0.53874782  0.1891443 1.9644381
           L          M          N         O          P         Q         R           S           T          U          V
1  0.8127268 -0.9294953 -0.9134001 2.0891866 -0.1560481  1.480088 0.8328550 -0.47946694 -0.55311500 -0.1393134  0.7400875
2 -0.9649869 -0.6869047 -0.8529926 0.1224387 -0.4958187 -1.273009 0.2728192  0.07974988 -0.01028435  0.9705935 -0.8299274
           W         X         Y         Z
1 -1.9356416 0.9440026 0.9074300 -1.082567
2 -0.2265877 0.4264449 0.9681043 -1.819203

我们可以定义一个函数,返回您想要的列子选择器。

pullToFront<-function(entry, vect){
    c(entry, vect[vect!=entry])
} 

其中vect是列名的矢量,entry是要移到前面的特定列。

假设您有以下列名。

vect<-letters[1:5]
vect
#output
#[1]"a" "b" "c" "d" "e"

我们想把"c"拉到前面,所以我们说

 subsettor<-pullToFront("c", vect)
 subsettor
 #output
 #[1]"c" "a" "b" "d" "e"

然后给定一个包含这些列名的数据帧,您只需说

 df[,subsettor]

你可以通过说来使用这个功能

 vect<-colnames(df)

然后隔离你想以任何方式移动到前面的

相关内容

最新更新