source

데이터 프레임의 열 이름 변경

lovecheck 2023. 6. 6. 08:29
반응형

데이터 프레임의 열 이름 변경

저는 "new price" (아래 참조)라는 데이터 프레임을 가지고 있으며 R에 있는 제 프로그램의 열 이름을 변경하고 싶습니다.

> newprice
   Chang.  Chang.   Chang.
1     100       36      136
2     120      -33       87
3     150       14      164

사실 이것이 바로 다음과 같은 일을 참조하십시오.

names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice") 

저는 보시는 것처럼 각 열 이름이 달라지기를 원하기 때문에 이것을 반복하지 않았습니다.

R 콘솔에 프로그램을 붙여넣으면 다음과 같은 출력이 표시됩니다.

> names(newprice)[1]<-paste(“premium”)
Error: unexpected input in "names(newprice)[1]<-paste(“"
> names(newprice)[2]<-paste(“change”)
Error: unexpected input in "names(newprice)[2]<-paste(“"
> names(newprice)[3]<-paste(“newpremium”)
Error: unexpected input in "names(newprice)[3]<-paste(“"

저는 똑같이 사용해 보았습니다.c()함수 예를 들어c("premium")대신에paste()기능은 있지만 소용이 없습니다.

누가 이것을 알아내는 것을 도와줄 수 있습니까?

사용colnames()함수:

R> X <- data.frame(bad=1:3, worse=rnorm(3))
R> X
  bad     worse
1   1 -2.440467
2   2  1.320113
3   3 -0.306639
R> colnames(X) <- c("good", "better")
R> X
  good    better
1    1 -2.440467
2    2  1.320113
3    3 -0.306639

부분 집합을 지정할 수도 있습니다.

R> colnames(X)[2] <- "superduper"

사용자:

colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"

오류는 "smart-quote"(또는 "smart-quote") 또는 "smart-quotesmart-quote"여기서의 교훈은 "인용문을 스마트 인용문으로 변환하는 '편집기'에 코드를 쓰지 마십시오."라는 것입니다.

names(newprice)[1]<-paste(“premium”)  # error
names(newprice)[1]<-paste("premium")  # works

또한, 당신은 필요하지 않습니다.paste("premium")(에 대한 요청)paste중복됨) 그리고 공간을 두는 것이 좋습니다.<-혼동을 방지하기 위해(예:x <- -10; if(x<-3) "hi" else "bye"; x).

시도:

names(newprice)[1] <- "premium"

이 작업을 수행하는 새로운 권장 방법은setNames기능.?setNames이렇게 하면 의 새 복사본이 생성됩니다.data.frame반드시 결과를 원본에 할당합니다.data.frame그것이 당신의 의도라면.

data_frame <- setNames(data_frame, c("premium","change","newprice"))

R의 최신 버전을 사용하면 경고가 표시됩니다.colnames앞의 답변에서 제시한 몇 가지 방법으로.

만약 이것이data.table대신, 당신은 그것을 사용할 수 있습니다.data.table기능.setnames참조를 통해 특정 열 이름 또는 단일 열 이름을 수정할 수 있습니다.

setnames(data_table, "old-name", "new-name")

저도 같은 문제가 있었고 이 코드는 저에게 잘 해결되었습니다.

names(data)[names(data) == "oldVariableName"] <- "newVariableName"

간단히 말해서, 이 코드는 다음을 수행합니다.

names(data)데이터 프레임의 모든 이름을 조사합니다(data)

[names(data) == oldVariableName]변수 이름을 추출합니다(oldVariableName이름을 바꾸고 싶은 경우<- "newVariableName"새 변수 이름을 할당합니다.

다른 것들과 유사합니다.

cols <- c("premium","change","newprice")
colnames(dataframe) <- cols

매우 간단하고 쉽게 수정할 수 있습니다.

열 이름을 열 이름 함수로 변경합니다.

colnames(newprice)[1] = "premium"
colnames(newprice)[2] = "change"
colnames(newprice)[3] = "newprice"

이전 열 이름만 알고 있을 때 모든 열이 아닌 여러 열의 이름을 한 번에 변경해야 하는 경우 사용할 수 있습니다.colnames기능 및%in%교환입니다.예:

df = data.frame(bad=1:3, worse=rnorm(3), worst=LETTERS[1:3])

   bad      worse    worst
1   1 -0.77915455       A
2   2  0.06717385       B
3   3 -0.02827242       C

이제 "나쁜" 및 "나쁜"을 "좋은" 및 "최고"로 변경하려고 합니다.사용할 수 있습니다.

colnames(df)[which(colnames(df) %in% c("bad","worst") )] <- c("good","best")

이것은 결과적으로

  good      worse  best
1    1 -0.6010363    A
2    2  0.7336155    B
3    3  0.9435469    C

제 칼럼 이름은 아래와 같습니다.

colnames(t)
[1] "Class"    "Sex"      "Age"      "Survived" "Freq" 

Class and Sex의 열 이름을 변경하고 싶습니다.

colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ")

몇 가지 옵션이 있습니다.dplyr::rename()그리고.dplyr::select():

library(dplyr)

mtcars %>% 
  tibble::rownames_to_column('car_model') %>%                            # convert rowname to a column. tibble must be installed.
  select(car_model, est_mpg = mpg, horse_power = hp, everything()) %>%   # rename specific columns and reorder
  rename(weight = wt, cylinders = cyl) %>%                               # another option for renaming specific columns that keeps everything by default
  head(2)
      car_model est_mpg horse_power cylinders disp drat weight  qsec vs am gear carb
1     Mazda RX4      21         110         6  160  3.9  2.620 16.46  0  1    4    4
2 Mazda RX4 Wag      21         110         6  160  3.9  2.875 17.02  0  1    4    4

또한 세 가지 범위의 변형이 있습니다.dplyr::rename():dplyr::rename_all()모든 열 이름에 대해,dplyr::rename_if()열 이름을 조건부로 대상으로 지정하는 경우dplyr::rename_at()이름이 지정된 열을 선택합니다.다음 예제에서는 공백과 마침표를 밑줄로 바꾸고 모든 항목을 소문자로 변환합니다.

iris %>%  
  rename_all(~gsub("\\s+|\\.", "_", .)) %>% 
  rename_all(tolower) %>% 
  head(2)
  sepal_length sepal_width petal_length petal_width species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa

dplyr::select_all()유사한 방식으로 사용할 수도 있습니다.

iris %>%  
  select_all(~gsub("\\s+|\\.", "_", .)) %>% 
  select_all(tolower) %>% 
  head(2)
  sepal_length sepal_width petal_length petal_width species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa

시도:

names(newprice) <- c("premium", "change", "newprice")

스콧 윌슨의 답변을 수정하고 약간 확장하기 위해서야.
data할 수 . table'ssetnamesdata.too.data.frame 파일에 .

가 빨라질 , 작업 속도가 빨라질 것으로 예상할 수 있습니다.setnames참조를 통해 열 이름을 업데이트하므로 메모리 사용 효율성이 향상됩니다.이는 다음을 통해 추적할 수 있습니다.address함수, 아래를 참조하십시오.

library(data.table)
set.seed(123)
n = 1e8

df = data.frame(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(df)
#[1] "0x208f9f00"
colnames(df) <- c("good", "better")
address(df)
#[1] "0x208fa1d8"
rm(df)

dt = data.table(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(dt)
#[1] "0x535c830"
setnames(dt, c("good", "better"))
address(dt)
#[1] "0x535c830"
rm(dt)

따라서 메모리 제한에 도달한 경우 이 메모리를 대신 사용할 수 있습니다.

편집은 다음과 같이 수행할 수 있습니다.

newprice <- edit(newprice)

열 이름을 수동으로 변경합니다.

이것은 도움이 될 수 있습니다.

rename.columns=function(df,changelist){
  #renames columns of a dataframe
  for(i in 1:length(names(df))){
    if(length(changelist[[names(df)[i]]])>0){
      names(df)[i]= changelist[[names(df)[i]]]
    }
  }
  df
}

# Specify new dataframe
df=rename.columns(df,list(old.column='new.column.name'))

데이터 프레임이 2개인 경우 다음 작업이 가능합니다.

 DF1<-data.frame('a', 'b')
 DF2<-data.frame('c','d')

우리는 DF1의 이름을 다음과 같이 변경합니다.

 colnames(DF1)<- colnames(DF2)

데이터 프레임 열 이름 변경

colnames(dataset)[colnames(dataset) == 'name'] <- 'newcolumnname'

을 사용한 한 가지 data.table:

library(data.table)

setDT(dataframe)

setnames(dataframe,'Old1','New1')
setnames(dataframe,'Old2','New2')

이것은 나에게 도움이 됩니다.

newprice<- setNames(newprice, c("premium", "change", "newprice"))

언급URL : https://stackoverflow.com/questions/6081439/changing-column-names-of-a-data-frame

반응형