data.frame에서 단일 열의 이름을 변경하는 방법은 무엇입니까?
열이 하나 이상인 데이터 프레임이 있으면 사용할 수 있습니다.
colnames(x) <- c("col1","col2")
열 이름을 변경합니다.한 칸이면 어떻게 하나요?열이 하나만 있는 벡터 또는 데이터 프레임을 의미합니다.
예:
trSamp <- data.frame(sample(trainer$index, 10000))
head(trSamp )
# sample.trainer.index..10000.
# 1 5907862
# 2 2181266
# 3 7368504
# 4 1949790
# 5 3475174
# 6 6062879
ncol(trSamp)
# [1] 1
class(trSamp)
# [1] "data.frame"
class(trSamp[1])
# [1] "data.frame"
class(trSamp[,1])
# [1] "numeric"
colnames(trSamp)[2] <- "newname2"
# Error in names(x) <- value :
# 'names' attribute [2] must be the same length as the vector [1]
이는 변수의 정확한 위치를 기억할 필요가 없는 일반적인 방법입니다.
# df = dataframe
# old.var.name = The name you don't like anymore
# new.var.name = The name you want to get
names(df)[names(df) == 'old.var.name'] <- 'new.var.name'
이 코드는 거의 다음과 같습니다.
names(df)에서는 모든이조다니에 을 조사합니다.df[names(df) == old.var.name]합니다.<- 'new.var.name'새 변수 이름을 할당합니다.
colnames(trSamp)[2] <- "newname2"
두 번째 열의 이름을 설정하려고 합니다.개체에 열이 하나만 있으므로 명령에서 오류를 발생시킵니다.이 정도면 충분합니다.
colnames(trSamp) <- "newname2"
colnames(df)[colnames(df) == 'oldName'] <- 'newName'
이지만, 이질은오질이수사있다습니용할제만지를 사용할 수 에 주목할 .setnamesdata.table꾸러미
library(data.table)
setnames(DF, "oldName", "newName")
# or since the data.frame in question is just one column:
setnames(DF, "newName")
# And for reference's sake, in general (more than once column)
nms <- c("col1.name", "col2.name", etc...)
setnames(DF, nms)
이것은 또한 Hadley's를 사용하여 수행할 수 있습니다.plyr패지고, 리그키고rename기능.
library(plyr)
df <- data.frame(foo=rnorm(1000))
df <- rename(df,c('foo'='samples'))
위치를 알 수 없는 이름으로 이름을 바꾸고 한 번에 여러 개의 이름을 변경할 수 있습니다.예를 들어 병합을 수행한 후 다음과 같은 메시지가 표시될 수 있습니다.
letterid id.x id.y
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
그런 다음 다음을 사용하여 한 번에 이름을 바꿀 수 있습니다.
letters <- rename(letters,c("id.x" = "source", "id.y" = "target"))
letterid source target
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
열 이름을 바꾸는 가장 좋은 방법은 다음과 같이 dplyr 패키지를 사용하는 것입니다.
require(dplyr)
df = rename(df, new_col01 = old_col01, new_col02 = old_col02, ...)
모든 데이터 집합에서 하나 이상의 열 이름을 바꿀 때도 동일하게 작동합니다.
우리는 사용할 수 있습니다.dplyr::rename_at되었지만) 으):
library(dplyr)
cars %>% rename_at("speed",~"new") %>% head
cars %>% rename_at(vars(speed),~"new") %>% head
cars %>% rename_at(1,~"new") %>% head
# new dist
# 1 4 2
# 2 4 10
# 3 7 4
# 4 7 22
# 5 8 16
# 6 9 10
- 파이프 체인에서 잘 작동하는
- 이름이 변수에 저장될 때 편리합니다.
- 이름 또는 열 인덱스와 함께 작업
- 명료하고 간결한
데이터 프레임 열 이름을 하나씩 바꾸는 다음 스타일이 좋습니다.
colnames(df)[which(colnames(df) == 'old_colname')] <- 'new_colname'
어디에
which(colnames(df) == 'old_colname')
특정 열의 인덱스를 기준으로 반환합니다.
d는 myDays 및 temp라는 이름의 데이터 프레임이라고 합니다."MyDays"의 이름을 "Date"로 변경하려면,
library(plyr)
rename(df,c("myDays" = "Date"))
아니면 파이프로, 당신은 할 수 있습니다.
dfNew <- df %>%
plyr::rename(c("myDays" = "Date"))
이것은 이미 밖에 나와 있을 수 있지만, 저는 해결책을 찾는 동안 필드 이름을 바꾸는 것을 가지고 놀다가 즉흥적으로 이것을 시도했습니다.내 목적을 위해 일했습니다.
Table1$FieldNewName <- Table1$FieldOldName
Table1$FieldOldName <- NULL
편집이 여기서 시작됩니다.
이것도 작동합니다.
library(dplyr)
df <- dplyr::rename(df, c("oldColName" = "newColName"))
시도:
colnames(x)[2] <- 'newname2'
당신은 할 수 .rename.vars에 시대에gdata꾸러미
library(gdata)
df <- rename.vars(df, from = "oldname", to = "newname")
이 기능은 변경할 변수 이름이 두 개 이상 있거나 변수 이름에 일부 텍스트를 추가하거나 앞에 추가하려는 경우에 특히 유용하며 다음과 같은 작업을 수행할 수 있습니다.
df <- rename.vars(df, from = c("old1", "old2", "old3",
to = c("new1", "new2", "new3"))
변수 이름의 하위 집합에 텍스트를 추가하는 예는 https://stackoverflow.com/a/28870000/180892 을 참조하십시오.
당신은 또한 'Hmisc' 패키지의 'upData'를 시도할 수 있습니다.
library(Hmisc)
trSamp = upData(trSamp, rename=c(sample.trainer.index..10000. = 'newname2'))
데이터 프레임에 열이 하나만 있는 경우 다음을 사용할 수 있습니다.names(trSamp) <- "newname2"
OP의 질문은 훌륭하고 진실하게 답변되었습니다.그러나 경우에 따라 유용한 트릭이 있습니다. 데이터 프레임에서 열 이름의 위치에 관계없이 열 이름의 부분 일치입니다.
이름에 대한 부분 일치:
d <- data.frame(name1 = NA, Reported.Cases..WHO..2011. = NA, name3 = NA)
## name1 Reported.Cases..WHO..2011. name3
## 1 NA NA NA
names(d)[grepl("Reported", names(d))] <- "name2"
## name1 name2 name3
## 1 NA NA NA
다른 예: "구문"이 있는 경우 부분 일치:
d <- data.frame(name1 = NA, Reported.Cases..WHO..2011. = NA, name3 = NA)
## name1 Reported.Cases..WHO..2011. name3
## 1 NA NA NA
names(d)[grepl("[[:punct:]]", names(d))] <- "name2"
## name1 name2 name3
## 1 NA NA NA
이것들은 제가 오늘 다뤄야 할 예들입니다. 저는 공유할 가치가 있다고 생각했습니다.
단순히 열 이름을 names(dataset)[index_value] <- "new_col_name" 코드로 원하는 새 이름의 데이터 세트로 변경합니다.
원하는 이름으로 데이터 프레임에 새 열을 추가하고 기존 열에서 데이터를 가져옵니다.다음과 같이:
dataf$value=dataf$Article1Order
그런 다음 이전 열을 제거합니다! 다음과 같이 말합니다.
dataf$Article1Order<-NULL
이 코드는 어리석게 보일 수 있습니다!하지만 완벽하게 작동합니다...
찾았습니다colnames()더 쉬운 논쟁 https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/row%2Bcolnames
데이터 프레임에서 일부 열 선택
df <- data.frame(df[, c( "hhid","b1005", "b1012_imp", "b3004a")])
선택한 열 이름을 순서대로 바꿉니다.
colnames(df) <- c("hhid", "income", "cost", "credit")
이름과 값을 확인합니다.
names(df);head(df)
우리는 사용할 수 있습니다.rename_with함수를 사용하여 열 이름을 변경하는 방법(stringr예를 들어 함수).
다음 데이터를 고려합니다.df_1:
df_1 <- data.frame(
x = replicate(n = 3, expr = rnorm(n = 3, mean = 10, sd = 1)),
y = sample(x = 1:2, size = 10, replace = TRUE)
)
names(df_1)
#[1] "x.1" "x.2" "x.3" "y"
모든 변수 이름 바꾸기dplyr::everything():
library(tidyverse)
df_1 %>%
rename_with(.data = ., .cols = everything(.),
.fn = str_replace, pattern = '.*',
replacement = str_c('var', seq_along(.), sep = '_')) %>%
names()
#[1] "var_1" "var_2" "var_3" "var_4"
이름 파티클로 이름 바꾸기dplyr동사(starts_with,ends_with,contains,matches, ...).
예제 사용.(x변수):
df_1 %>%
rename_with(.data = ., .cols = contains('.'),
.fn = str_replace, pattern = '.*',
replacement = str_c('var', seq_along(.), sep = '_')) %>%
names()
#[1] "var_1" "var_2" "var_3" "y"
클래스 테스트의 많은 기능을 사용하여 클래스별로 이름 바꾸기is.integer,is.numeric,is.factor...
예제 사용is.integer(y):
df_1 %>%
rename_with(.data = ., .cols = is.integer,
.fn = str_replace, pattern = '.*',
replacement = str_c('var', seq_along(.), sep = '_')) %>%
names()
#[1] "x.1" "x.2" "x.3" "var_1"
경고:
경고 메시지: 1: instri_replace_first_regex(문자열, 패턴, fix_replacement(교체): 더 긴 개체 길이의 배수가 아닙니다. 2: 이름 [cols] <- .fn(names[cols], ...): 바꿀 항목 수가 교체 길이의 배수가 아닙니다.
그것은 단지 모순이기 때문에 관련이 없습니다.seq_along(.)교체 기능을 사용합니다.
나는 계속 이것에 대해 생각했고 다음과 같은 기능을 생각해냈습니다.
renamecols <- function(df, oldnames, newnames) {
# _______________________________________
# Defenses ####
stopifnot( exprs = {
is.data.frame(df)
length(oldnames) == length(newnames)
# all(oldnames %in% names(df))
}
)
# ___________________________________________
# Computations ####
df_names <- names(df)
old_position <- which(oldnames %in% df_names)
old_available <- oldnames[old_position]
new_available <- newnames[old_position]
tochange <- vector(length = length(old_available))
for (i in seq_along(old_available)) {
tochange[i] <- which(df_names %in% old_available[i])
}
names(df)[tochange] <- new_available
return(df)
}
큰 데이터 세트에서 테스트할 수 있으며 비교적 빠릅니다.물론, 그렇게 빠르지는 않을 것입니다.data.table::setnames()그러나 이것은 기본 R 작업에 유용한 솔루션입니다.
이 접근 방식의 좋은 점은 새 이름과 오래된 이름이 어떤 순서로든 존재할 수 있고 데이터에 이전 이름이 존재할 필요조차 없으며 무시된다는 것입니다.유일한 요구 사항은 이전 이름과 새 이름이 직접 일치하는 것입니다.
n <- 3
l <- as.list(1:(length(letters)*n))
nn <- expand.grid(l = letters, n = 1:n)
names(l) <- paste0(nn$l, nn$n)
df <- as.data.frame(l)
oldnames <- sample(names(df), floor(length(names(df))/3))
newnames <- paste0("new_", oldnames)
renamecols(df, oldnames, newnames) |>
names()
#> [1] "new_a1" "b1" "new_c1" "d1" "new_e1" "f1" "new_g1" "h1"
#> [9] "i1" "j1" "k1" "new_l1" "new_m1" "n1" "o1" "p1"
#> [17] "new_q1" "r1" "s1" "t1" "u1" "new_v1" "new_w1" "new_x1"
#> [25] "y1" "z1" "new_a2" "b2" "c2" "d2" "e2" "f2"
#> [33] "new_g2" "h2" "new_i2" "new_j2" "k2" "l2" "m2" "n2"
#> [41] "new_o2" "p2" "q2" "new_r2" "s2" "t2" "u2" "new_v2"
#> [49] "w2" "x2" "y2" "z2" "a3" "new_b3" "new_c3" "d3"
#> [57] "new_e3" "f3" "g3" "h3" "new_i3" "j3" "k3" "l3"
#> [65] "m3" "n3" "o3" "p3" "new_q3" "r3" "s3" "new_t3"
#> [73] "new_u3" "new_v3" "new_w3" "x3" "y3" "z3"
reprex v2.0.2를 사용하여 2023-05-04에 생성됨
library(dplyr)
rename(data, de=de.y)
언급URL : https://stackoverflow.com/questions/7531868/how-to-rename-a-single-column-in-a-data-frame
'programing' 카테고리의 다른 글
| API를 통해 Wordpress 플러그인에서 symphony 백엔드 서버로 파일을 업로드할 수 없습니까? (0) | 2023.06.11 |
|---|---|
| 포크 이후 하위 프로세스 디버깅(팔로우포크 모드 하위 구성) (0) | 2023.06.11 |
| 간단한 SQL 코드로 마리아DB의 NOCYLE(오라클) 계층 쿼리를 사용하여 CONNECT BY (0) | 2023.06.11 |
| C#을 사용하여 메서드를 매개 변수로 전달 (0) | 2023.06.11 |
| Angular 2 NgForm에서 터치된 이벤트를 관찰하는 방법은 무엇입니까? (0) | 2023.06.11 |