programing

열을 데이터 프레임의 첫 번째 위치로 이동

goodsources 2023. 6. 20. 21:35
반응형

열을 데이터 프레임의 첫 번째 위치로 이동

저는 데이터 프레임의 마지막 열을 시작(첫 번째 열)으로 이동하고 싶습니다.R에서 어떻게 해야 합니까?

제 data.frame에는 순서를 변경할 수 있는 열이 천 개 정도 있습니다.저는 단지 하나의 열을 선택하고 "시작으로 이동"

Dplyr의 선택() 접근 방식

마지막 열을 시작으로 이동:

new_df <- df %>%
  select(last_column_name, everything())

이 값은 모든 열 및 수량에 대해서도 유효합니다.

new_df <- df %>%
  select(col_5, col_8, everything())

사용 예제mtcars데이터 프레임:

head(mtcars, n = 2)
#                    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

# Last column is 'carb'
new_df <- mtcars %>% select(carb, everything())

head(new_df, n = 2)
#                   carb  mpg cyl disp  hp drat    wt  qsec vs am gear
# Mazda RX4            4 21.0   6  160 110 3.90 2.620 16.46  0  1    4
# Mazda RX4 Wag        4 21.0   6  160 110 3.90 2.875 17.02  0  1    4

dplyr 1.0.0이제 를 포함합니다.relocate()열 순서를 변경하는 함수입니다.기본 동작은 명명된 열을 첫 번째 위치로 이동하는 것입니다.

library(dplyr) # from version 1.0.0 

mtcars %>%
  relocate(carb) %>%
  head()

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

그러나 다른 위치는 다음을 사용하여 지정할 수 있습니다..before또는.after인수:

mtcars %>%
  relocate(gear, carb, .before = cyl) %>%
  head()

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

열을 새 순서로 지정하여 열 순서를 변경할 수 있습니다. 열 순서를 변경할 수 있습니다.data[,c(ORDER YOU WANT THEM TO BE IN)]

마지막 열을 처음으로 사용하려면 다음을 사용합니다.data[,c(ncol(data),1:(ncol(data)-1))]

> head(cars)
  speed dist
1     4    2
2     4   10
3     7    4
4     7   22
5     8   16
6     9   10

> head(cars[,c(2,1)])
  dist speed
1    2     4
2   10     4
3    4     7
4   22     7
5   16     8
6   10     9
dataframe<-dataframe[,c(1000, 1:999)]

마지막 열, 즉 1000번째 열이 첫 번째 열로 이동합니다.

이것을 답변으로 추가할 가치가 있는지, 댓글을 달면 좋을지 모르겠지만, 라는 기능을 작성했습니다.moveme사용자가 설명한 언어로 원하는 작업을 수행할 수 있습니다.다음 답변에서 기능을 찾을 수 있습니다. https://stackoverflow.com/a/18540144/1270695

에서 작동합니다.names당신의data.frame열 순서를 변경하는 데 사용할 수 있는 문자 벡터를 생성합니다.

mydf <- data.frame(matrix(1:12, ncol = 4))
mydf
moveme(names(mydf), "X4 first")
# [1] "X4" "X1" "X2" "X3"
moveme(names(mydf), "X4 first; X1 last")
# [1] "X4" "X2" "X3" "X1"

mydf[moveme(names(mydf), "X4 first")]
#   X4 X1 X2 X3
# 1 10  1  4  7
# 2 11  2  5  8
# 3 12  3  6  9

만약 당신이 이런 식으로 일을 뒤죽박죽으로 만들고 있다면, 당신의 것을 전환하는 것을 제안합니다.data.frame아주data.table및 사용setcolorder(내 것과 함께)moveme함수(원하는 경우)를 선택하여 참조로 변경합니다.


질문에서 "나는 단지 하나의 열을 선택하여 시작으로 옮기고 싶다"고 언급했습니다.특정 열이 아닌 임의 열인 경우에는 다음을 사용할 수도 있습니다.setdiff.

"mtcars" 데이터 세트로 작업 중이고 "am" 열을 시작으로 이동하려고 한다고 가정합니다.

x <- "am"
mtcars[c(x, setdiff(names(mtcars), x))]

명명된 열을 첫 번째 위치로 이동하려면 다음을 사용합니다.

df[,c(which(colnames(df)=="desired_colname"),which(colnames(df)!="desired_colname"))]

데이터 프레임의 마지막 열을 첫 번째 열 위치로 이동하기 위해 임의의 행 또는 열과 함께 작동하는 기본 R 접근 방식:

df <- df[,c(ncol(df),1:ncol(df)-1)]

다음을 대체하여 열을 첫 번째 열로 이동하는 데 사용할 수 있습니다.

df <- df[,c(your_column_number_here,1:ncol(df)-1)]

열 번호는 몰라도 열 레이블 이름은 알고 있으면 "your_columnn_name_here"를 대체하여 다음 작업을 수행합니다.

columnNumber <- which(colnames(df)=="your_column_name_here")
df <- df[,c(columnNumber,1:ncol(df)-1)]

또한 다음과 같은 기능도 있습니다.data.table할 수 있습니다.setcolorder():

library(data.table)
mtcars_copy <- copy(mtcars)
setDT(mtcars_copy)

# Move column "gear" in the first position
setcolorder(mtcars_copy, neworder = "gear")

head(mtcars_copy)

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

열이 여러 개인 경우 벡터의 순서를 언급합니다.

setcolorder(mtcars_copy, neworder = c("vs", "carb"))

head(mtcars_copy)
#    vs carb gear  mpg cyl disp  hp drat    wt  qsec am
# 1:  0    4    4 21.0   6  160 110 3.90 2.620 16.46  1
# 2:  0    4    4 21.0   6  160 110 3.90 2.875 17.02  1
# 3:  1    1    4 22.8   4  108  93 3.85 2.320 18.61  1
# 4:  1    1    3 21.4   6  258 110 3.08 3.215 19.44  0
# 5:  0    2    3 18.7   8  360 175 3.15 3.440 17.02  0
# 6:  1    1    3 18.1   6  225 105 2.76 3.460 20.22  0

데이터의 첫 번째 위치에 대한 모든 위치에서 열 이동

n <- which(colnames(df)=="column_need_move")
column_need_move <- df$column_need_to_move
df <- cbind(column_need_move, df[,-n])

첫 번째 하려면 새열생여열지면려정하로를 합니다..before=1인수:

my_data <- my_data %>% mutate(newcol = a*b, .before=1)

언급URL : https://stackoverflow.com/questions/22286419/move-a-column-to-first-position-in-a-data-frame

반응형