我在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)
然后隔离你想以任何方式移动到前面的