如何将第三列与最后一列交换,然后删除R中交换的最后一列

时间:2019-02-06 05:40:06

标签: r

我要与最后一列交换特定的列,然后在交换后删除最后一列。删除后,ncol(testFrame)将减少1

2 个答案:

答案 0 :(得分:2)

通常可以复制一个例子,但是您的描述足够清楚,可以理解您想做什么。

使用mtcars作为样本数据

df <- mtcars
head(df)
#                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1


swap_column <- 3
cols <- seq_len(ncol(df))
df1 <- df[replace(cols, cols == swap_column, ncol(df))][-ncol(df)]

head(df1)
#                   mpg cyl carb  hp drat    wt  qsec vs am gear
#Mazda RX4         21.0   6    4 110 3.90 2.620 16.46  0  1    4
#Mazda RX4 Wag     21.0   6    4 110 3.90 2.875 17.02  0  1    4
#Datsun 710        22.8   4    1  93 3.85 2.320 18.61  1  1    4
#Hornet 4 Drive    21.4   6    1 110 3.08 3.215 19.44  1  0    3
#Hornet Sportabout 18.7   8    2 175 3.15 3.440 17.02  0  0    3
#Valiant           18.1   6    1 105 2.76 3.460 20.22  1  0    3

我们replace的列号swap_column和最后一列号(ncol(df)),然后删除最后一列(-ncol(df))。

答案 1 :(得分:1)

我们可以使用add_column中的tibble方便地进行此操作。 .after.before参数可以采用列索引或列名。假设我们需要将最后一列移到第三位

library(tibble)
data(mtcars)
df1 <- add_column(mtcars[-ncol(mtcars)], mtcars[ncol(mtcars)], .after = 2) 
head(df1)
#                   mpg cyl carb disp  hp drat    wt  qsec vs am gear
#Mazda RX4         21.0   6    4  160 110 3.90 2.620 16.46  0  1    4
#Mazda RX4 Wag     21.0   6    4  160 110 3.90 2.875 17.02  0  1    4
#Datsun 710        22.8   4    1  108  93 3.85 2.320 18.61  1  1    4
#Hornet 4 Drive    21.4   6    1  258 110 3.08 3.215 19.44  1  0    3
#Hornet Sportabout 18.7   8    2  360 175 3.15 3.440 17.02  0  0    3
#Valiant           18.1   6    1  225 105 2.76 3.460 20.22  1  0    3