development

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

big-blog 2020. 2. 28. 19:22
반응형

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


"newprice"라는 데이터 프레임이 있고 (아래 참조) 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"

이 오류는 "스마트 따옴표"(또는 그 무엇이든)에 의해 발생합니다. 여기서의 교훈은 "따옴표를 스마트 인용 부호로 변환하는 '편집기'에 코드를 작성하지 마십시오"입니다.

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함수와 %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

시험:

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

다음을 수행하여 편집을 수행 할 수 있습니다.

newprice <- edit(newprice)

열 이름을 수동으로 변경하십시오.


Scott Wilson의 답변을 수정하고 약간 확장하십시오.
data.frame의 setnames함수도 data.table의 기능을 사용할 수 있습니다 .

작업 속도가 빨라지지는 않지만 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)

따라서 메모리 한계에 도달하면 대신이 한계를 사용하는 것이 좋습니다.


내 열 이름은 다음과 같습니다

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

도움이 될 수 있습니다.

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'))

colname 함수로 열 이름을 변경하려면 이것을 사용하십시오.

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

2 개의 데이터 프레임이있는 경우 다음 작업

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

DF1의 이름을 다음과 같이 변경합니다

 colnames(DF1)<- colnames(DF2)

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



반응형