데이터 프레임의 열 이름 변경
"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
'development' 카테고리의 다른 글
Java의 HTTP URL 주소 인코딩 (0) | 2020.02.29 |
---|---|
RGB 색상의 밝기를 결정하는 공식 (0) | 2020.02.28 |
노드 / 익스프레스 : EADDRINUSE, 이미 사용중인 주소-서버 종료 (0) | 2020.02.28 |
파이썬과 핍, 사용 가능한 패키지의 모든 버전을 나열합니까? (0) | 2020.02.28 |
AngularJS로 Enter 키를 누르면 양식 제출 (0) | 2020.02.28 |