데이터 프레임 열을 숫자 형식으로 변환하는 방법은 무엇입니까?
데이터 프레임 열을 숫자 유형으로 변환하는 방법은 무엇입니까?
(표시를 받지 못했기 때문에, 어떤 하지 않았기 에, 여러분은 에 두고 합니다.numeric
당신이 지원해야 한다고 제안합니다.transform
작업을 완료하기 위해 기능합니다.
이제 "변환 이상"을 보여드리겠습니다.
# create dummy data.frame
d <- data.frame(char = letters[1:5],
fake_char = as.character(1:5),
fac = factor(1:5),
char_fac = factor(letters[1:5]),
num = 1:5, stringsAsFactors = FALSE)
다음을 살펴 보겠습니다.data.frame
> d
char fake_char fac char_fac num
1 a 1 1 a 1
2 b 2 2 b 2
3 c 3 3 c 3
4 d 4 4 d 4
5 e 5 5 e 5
도망치자꾸나
> sapply(d, mode)
char fake_char fac char_fac num
"character" "character" "numeric" "numeric" "numeric"
> sapply(d, class)
char fake_char fac char_fac num
"character" "character" "factor" "factor" "integer"
이제 여러분은 아마 스스로에게 "이상 현상은 어디에 있나요?"라고 물을 것입니다.음, 저는 R에서 꽤 특이한 것들을 마주쳤고, 이것은 가장 혼란스러운 것은 아니지만, 특히 침대에 눕기 전에 이것을 읽으면 여러분을 혼란스럽게 할 수 있습니다.
두 의 열은 자, 처두열다같습다니과입니다.character
일부러 2명을 불렀죠ndfake_char
이의유을발다니견합성사의 유사점을 찾아보세요.character
더크가 답장에서 만든 변수입니다.사은입니다.numerical
가 변된벡터로 character
3열과rdth 4열은factor
"purely고그리유마입은막 "지령니다"입니다."입니다.numeric
.
당신이 경우는하를 한다면.transform
함수, 당신은 변환할 수 있습니다.fake_char
안으로numeric
그러나 그것은 아닙니다.char
변수 자체입니다.
> transform(d, char = as.numeric(char))
char fake_char fac char_fac num
1 NA 1 1 a 1
2 NA 2 2 b 2
3 NA 3 3 c 3
4 NA 4 4 d 4
5 NA 5 5 e 5
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion
하지만 만약 당신이 같은 일을 한다면,fake_char
그리고.char_fac
운이 좋을 것이고, NA 없이 도망칠 수 있을 것입니다.
> transform(d, fake_char = as.numeric(fake_char),
char_fac = as.numeric(char_fac))
char fake_char fac char_fac num
1 a 1 1 1 1
2 b 2 2 2 2
3 c 3 3 3 3
4 d 4 4 4 4
5 e 5 5 5 5
을 저장하는 data.frame
다음을 확인합니다.mode
그리고.class
다음을 얻을 수 있습니다.
> D <- transform(d, fake_char = as.numeric(fake_char),
char_fac = as.numeric(char_fac))
> sapply(D, mode)
char fake_char fac char_fac num
"character" "numeric" "numeric" "numeric" "numeric"
> sapply(D, class)
char fake_char fac char_fac num
"character" "numeric" "factor" "numeric" "integer"
결론은 다음과 같습니다. 벡터를 하나로 변환할 수 있지만 요소가 "변환 가능"한 경우에만 변환할 수 있습니다. 단 하나만 있으면character
벡터의 요소, 그 벡터를 변환하려고 할 때 오류가 발생할 것입니다.numerical
둘, 셋
그리고 내 요점을 증명하기 위해서야:
> err <- c(1, "b", 3, 4, "e")
> mode(err)
[1] "character"
> class(err)
[1] "character"
> char <- as.numeric(err)
Warning message:
NAs introduced by coercion
> char
[1] 1 NA 3 4 NA
이제 재미로(또는 연습을 위해) 다음 명령의 출력을 추측해 보십시오.
> fac <- as.factor(err)
> fac
???
> num <- as.numeric(fac)
> num
???
패트릭 번스에게 안부 전해 주세요!=)
이 된 의 범위가 은 저게도이된것또가: 변변범위의수이다수있상니습사있으용할면둘에움환할는또▁to▁▁use가▁can다▁you있▁you),▁of니수:▁(저▁if습or▁that▁convert를 사용할 수 있습니다.sapply
.
약간 터무니없지만 예를 들어보겠습니다.
data(cars)
cars[, 1:2] <- sapply(cars[, 1:2], as.factor)
3열, 6-15열 및 37열의 데이터 프레임을 숫자로 변환해야 한다고 가정하면 다음과 같습니다.
dat[, c(3,6:15,37)] <- sapply(dat[, c(3,6:15,37)], as.numeric)
한다면x
의 열 이름입니다.dat
,그리고.x
다음을 사용합니다.
as.numeric(as.character(dat$x))
코멘트를 추가했을 것입니다(낮은 평가 가능).
사용자 276042와 팡그라츠를 추가하기 위해서입니다.
dat$x = as.numeric(as.character(dat$x))
기존 열 x의 값을 재정의합니다.
다음 코드를 사용하여 모든 데이터 프레임 열을 숫자로 변환할 수 있습니다(X는 해당 열을 변환하려는 데이터 프레임입니다).
as.data.frame(lapply(X, as.numeric))
전체 행렬을 숫자로 변환하는 데는 두 가지 방법이 있습니다.다음 중 하나:
mode(X) <- "numeric"
또는:
X <- apply(X, 2, as.numeric)
또는 사용할 수 있습니다.data.matrix
모든 것을 숫자로 변환하는 기능. 그러나 요인이 올바르게 변환되지 않을 수도 있으므로 모든 것을 변환하는 것이 더 안전합니다.character
첫 번째:
X <- sapply(X, as.character)
X <- data.matrix(X)
행렬과 숫자로 동시에 변환하려면 보통 마지막 것을 사용합니다.
질문이 숫자에 국한되어 있지만, R을 시작할 때 이해하기 어려운 변환이 많이 있습니다.저는 도움이 되는 방법들을 다루는 것을 목표로 할 것입니다.이 질문은 이 질문과 유사합니다.
(1) 요인을 숫자로 직접 변환할 수 없고, 먼저 문자 클래스로 변환해야 하며, (2) 날짜는 일반적으로 별도로 처리해야 하는 특수한 경우이며, (3) 데이터 프레임 열을 순환하는 것이 까다로울 수 있기 때문에 R에서 유형 변환은 번거로울 수 있습니다.다행히도, "tidyverse"는 대부분의 문제를 해결했습니다.
이 솔루션은 다음을 사용합니다.mutate_each()
데이터 프레임의 모든 열에 함수를 적용합니다.이 경우, 우리는 다음을 적용하고자 합니다.type.convert()
가능한 경우 문자열을 숫자로 변환하는 함수입니다.R은 요인을 좋아하기 때문에 문자를 유지해야 하는 문자 열이 요인으로 변경됩니다.이 문제를 해결하려면,mutate_if()
함수는 요인이 되고 문자로 변경되는 열을 탐지하는 데 사용됩니다.마지막으로, 저는 초보자들에게도 종종 걸림돌이 되기 때문에 러브레이트가 어떻게 캐릭터 수업의 타임스탬프를 날짜-시간으로 바꿀 수 있는지 보여주고 싶었습니다.
library(tidyverse)
library(lubridate)
# Recreate data that needs converted to numeric, date-time, etc
data_df
#> # A tibble: 5 × 9
#> TIMESTAMP SYMBOL EX PRICE SIZE COND BID BIDSIZ OFR
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 2012-05-04 09:30:00 BAC T 7.8900 38538 F 7.89 523 7.90
#> 2 2012-05-04 09:30:01 BAC Z 7.8850 288 @ 7.88 61033 7.90
#> 3 2012-05-04 09:30:03 BAC X 7.8900 1000 @ 7.88 1974 7.89
#> 4 2012-05-04 09:30:07 BAC T 7.8900 19052 F 7.88 1058 7.89
#> 5 2012-05-04 09:30:08 BAC Y 7.8900 85053 F 7.88 108101 7.90
# Converting columns to numeric using "tidyverse"
data_df %>%
mutate_all(type.convert) %>%
mutate_if(is.factor, as.character) %>%
mutate(TIMESTAMP = as_datetime(TIMESTAMP, tz = Sys.timezone()))
#> # A tibble: 5 × 9
#> TIMESTAMP SYMBOL EX PRICE SIZE COND BID BIDSIZ OFR
#> <dttm> <chr> <chr> <dbl> <int> <chr> <dbl> <int> <dbl>
#> 1 2012-05-04 09:30:00 BAC T 7.890 38538 F 7.89 523 7.90
#> 2 2012-05-04 09:30:01 BAC Z 7.885 288 @ 7.88 61033 7.90
#> 3 2012-05-04 09:30:03 BAC X 7.890 1000 @ 7.88 1974 7.89
#> 4 2012-05-04 09:30:07 BAC T 7.890 19052 F 7.88 1058 7.89
#> 5 2012-05-04 09:30:08 BAC Y 7.890 85053 F 7.88 108101 7.90
다음과 같은 문제가 발생하는 경우:
as.numeric(as.character(dat$x))
당신의 소수점을 보세요."."(예: "5,3") 대신 "."이면 위의 항목이 작동하지 않습니다.
잠재적인 해결책은 다음과 같습니다.
as.numeric(gsub(",", ".", dat$x))
저는 이것이 몇몇 비영어권 국가들에서 꽤 흔하다고 생각합니다.
팀 말이 맞아요 셰인이 빠졌네요다음은 추가 예입니다.
R> df <- data.frame(a = as.character(10:15))
R> df <- data.frame(df, num = as.numeric(df$a),
numchr = as.numeric(as.character(df$a)))
R> df
a num numchr
1 10 1 10
2 11 2 11
3 12 3 12
4 13 4 13
5 14 5 14
6 15 6 15
R> summary(df)
a num numchr
10:1 Min. :1.00 Min. :10.0
11:1 1st Qu.:2.25 1st Qu.:11.2
12:1 Median :3.50 Median :12.5
13:1 Mean :3.50 Mean :12.5
14:1 3rd Qu.:4.75 3rd Qu.:13.8
15:1 Max. :6.00 Max. :15.0
R>
우리들의data.frame
이제 요인 열(숫자)의 요약과 숫자 요약이 표시됩니다.as.numeric()
숫자 요인 수준을 얻었기 때문에 잘못된 --- 및 (정확한) 요약as.numeric(as.character())
.
을 사용한 type.convert()
그리고.rapply()
:
convert_types <- function(x) {
stopifnot(is.list(x))
x[] <- rapply(x, utils::type.convert, classes = "character",
how = "replace", as.is = TRUE)
return(x)
}
d <- data.frame(char = letters[1:5],
fake_char = as.character(1:5),
fac = factor(1:5),
char_fac = factor(letters[1:5]),
num = 1:5, stringsAsFactors = FALSE)
sapply(d, class)
#> char fake_char fac char_fac num
#> "character" "character" "factor" "factor" "integer"
sapply(convert_types(d), class)
#> char fake_char fac char_fac num
#> "character" "integer" "factor" "factor" "integer"
데이터 프레임 열을 숫자로 변환하려면 다음 작업만 수행하면 됩니다.
요인을 숫자로:-
data_frame$column <- as.numeric(as.character(data_frame$column))
다른 사람들은 이 주제를 꽤 잘 다루었지만, 저는 이 빠른 생각/힌트를 추가하고 싶습니다.regexp를 사용하여 문자가 잠재적으로 숫자로만 구성되어 있는지 여부를 미리 확인할 수 있습니다.
for(i in seq_along(names(df)){
potential_numcol[i] <- all(!grepl("[a-zA-Z]",d[,i]))
}
# and now just convert only the numeric ones
d <- sapply(d[,potential_numcol],as.numeric)
더 세련된 정규 표현과 그 힘을 배우고 경험해야 하는 깔끔한 이유는 다음과 같은 멋진 웹사이트를 참조하십시오.
데이터 프레임에 여러 유형의 열이 있고 일부 문자가 있는 경우 일부 숫자는 숫자 값이 포함된 열만 숫자로 변환하기 위해 다음을 시도합니다.
for (i in 1:length(data[1,])){
if(length(as.numeric(data[,i][!is.na(data[,i])])[!is.na(as.numeric(data[,i][!is.na(data[,i])]))])==0){}
else {
data[,i]<-as.numeric(data[,i])
}
}
hablar 포함::삭제
열을 데이터 하려면 여러을열사수있다데유이형방쉽변법게환을 사용할 수 .hablar::convert
구문: 단순구:df %>% convert(num(a))
열 a를 df에서 숫자로 변환합니다.
상세예
열을변다니합의 모든 을 변환해 .mtcars
성격에 맞는
df <- mtcars %>% mutate_all(as.character) %>% as_tibble()
> df
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 21 6 160 110 3.9 2.62 16.46 0 1 4 4
2 21 6 160 110 3.9 2.875 17.02 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1
와 함께hablar::convert
:
library(hablar)
# Convert columns to integer, numeric and factor
df %>%
convert(int(cyl, vs),
num(disp:wt),
fct(gear))
결과:
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<chr> <int> <dbl> <dbl> <dbl> <dbl> <chr> <int> <chr> <fct> <chr>
1 21 6 160 110 3.9 2.62 16.46 0 1 4 4
2 21 6 160 110 3.9 2.88 17.02 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1
4 21.4 6 258 110 3.08 3.22 19.44 1 0 3 1
char 열이 존재할 수 있음을 고려하여, 이는 Excel 시트의 열 유형 자동으로 다음과 같이 대답하기의 @Abdou에 기반합니다.
makenumcols<-function(df){
df<-as.data.frame(df)
df[] <- lapply(df, as.character)
cond <- apply(df, 2, function(x) {
x <- x[!is.na(x)]
all(suppressWarnings(!is.na(as.numeric(x))))
})
numeric_cols <- names(df)[cond]
df[,numeric_cols] <- sapply(df[,numeric_cols], as.numeric)
return(df)
}
df<-makenumcols(df)
인자 보존에 신경 쓰지 않고 숫자로 변환할 수 있는 열에 적용하고 싶다면 아래 스크립트를 사용했고, 만약 df가 원래 데이터 프레임이라면 아래 스크립트를 사용하면 됩니다.
df[] <- lapply(df, as.character)
df <- data.frame(lapply(df, function(x) ifelse(!is.na(as.numeric(x)), as.numeric(x), x)))
에서, "PC(Rv.3.2.3)"apply
또는sapply
실수를 저지르다 lapply
잘 작동합니다.
dt[,2:4] <- lapply(dt[,2:4], function (x) as.factor(as.numeric(x)))
문자를 숫자로 변환하려면 다음을 적용하여 요인으로 변환해야 합니다.
BankFinal1 <- transform(BankLoan, LoanApproval=as.factor(LoanApproval))
BankFinal1 <- transform(BankFinal1, LoanApp=as.factor(LoanApproval))
하나의 열은 숫자로 변환할 수 없으므로 동일한 데이터로 두 개의 열을 만들어야 합니다.하나의 변환을 수행하면 다음 오류가 발생합니다.
transform(BankData, LoanApp=as.numeric(LoanApproval))
Warning message: In eval(substitute(list(...)), `_data`, parent.frame()) : NAs introduced by coercion
따라서 동일한 데이터의 두 열을 수행한 후 적용됩니다.
BankFinal1 <- transform(BankFinal1, LoanApp = as.numeric(LoanApp),
LoanApproval = as.numeric(LoanApproval))
문자를 숫자로 성공적으로 변환합니다.
df
데이터 프레임입니다. x
는 의열다니의 입니다.df
를 .
as.numeric(factor(df$x))
언급URL : https://stackoverflow.com/questions/2288485/how-to-convert-a-data-frame-column-to-numeric-type
'programing' 카테고리의 다른 글
루비에서 YAML 파일을 구문 분석하려면 어떻게 해야 합니까? (0) | 2023.07.09 |
---|---|
컴파일러가 프로그램의 시간 복잡성을 저하시키는 것이 합법입니까?이것이 관찰 가능한 행동으로 간주됩니까? (0) | 2023.07.09 |
React + TypeScript 오류:이 호출과 일치하는 오버로드가 없습니다. (0) | 2023.07.09 |
MariaDB에서 트리거 starts에 배치된 함수는 다른 값을 반환합니다. (0) | 2023.07.09 |
FutureWarning: 저장이 Python의 공용 API의 일부가 아닙니다. (0) | 2023.07.09 |