UFO ET IT

데이터 프레임 열의 데이터 유형 결정

ufoet 2023. 6. 22. 23:05
반응형

데이터 프레임 열의 데이터 유형 결정

나는 R을 사용하고 있고 데이터 프레임에 데이터를 로드했습니다.read.csv()데이터 프레임의 각 열의 데이터 유형은 어떻게 결정합니까?

시작하는 것이 가장 좋습니다.몇 가지 예를 살펴보기 위해 다음과 같은 데이터를 만들어 보겠습니다.

set.seed(3221)  # this makes the example exactly reproducible
my.data <- data.frame(y=rnorm(5), 
                      x1=c(1:5), 
                      x2=c(TRUE, TRUE, FALSE, FALSE, FALSE),
                      X3=letters[1:5])

@Wilmer E Henao H의 솔루션은 매우 간소화되었습니다.

sapply(my.data, class)
        y        x1        x2        X3 
"numeric" "integer" "logical"  "factor" 

사용.str()요인 수준 및 각 변수의 처음 몇 개 값과 같은 정보와 추가 이점을 얻을 수 있습니다.

str(my.data)
'data.frame':  5 obs. of  4 variables:
$ y : num  1.03 1.599 -0.818 0.872 -2.682
$ x1: int  1 2 3 4 5
$ x2: logi  TRUE TRUE FALSE FALSE FALSE
$ X3: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5

@Gavin Simpson의 접근 방식도 간소화되었지만, 다음과 약간 다른 정보를 제공합니다.class():

sapply(my.data, typeof)
       y        x1        x2        X3 
"double" "integer" "logical" "integer"

에 대한 자세한 내용은class,typeof그리고 둘째 아이는mode이 우수한 SO 스레드를 보십시오.R. '모드'와 '클래스'와 '유형'의 사물 유형에 대한 종합적인 조사는 불충분합니다.

sapply(yourdataframe, class)

데이터 프레임은 사용 중인 데이터 프레임의 이름입니다.

제가 제안하고 싶습니다

sapply(foo, typeof)

데이터 프레임에 있는 벡터의 실제 유형이 필요한 경우. class()뭔가 다른 짐승 같은 존재야.

이 정보를 벡터로 가져올 필요가 없는 경우(즉, 나중에 프로그래밍 방식으로 다른 작업을 수행할 필요가 없는 경우),str(foo).

두 경우 모두foo데이터 프레임의 이름으로 대체됩니다.

소형 데이터 프레임의 경우:

library(tidyverse)

as_tibble(mtcars)

데이터 유형이 포함된 DF의 인쇄물을 제공합니다.

# A tibble: 32 x 11
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
 * <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1

대용량 데이터 프레임의 경우:

glimpse(mtcars)

데이터 유형에 대한 구조화된 보기를 제공합니다.

Observations: 32
Variables: 11
$ mpg  <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 17....
$ cyl  <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, ...
$ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, 167.6, 167.6...
$ hp   <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 180, 205, 215...
$ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92, 3.07, 3.0...
$ wt   <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.150, 3.440, 3.440...
$ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22.90, 18.30, 18.90...
$ vs   <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, ...
$ am   <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, ...
$ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, ...
$ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, ...

열의 데이터 유형 목록을 가져오려면(위의 @Alexandre에서 설명한 대로):

map(mtcars, class)

에는 데이터 유형 목록이 나와 있습니다.

$mpg
[1] "numeric"

$cyl
[1] "numeric"

$disp
[1] "numeric"

$hp
[1] "numeric"

열의 데이터 유형을 변경하는 방법

library(hablar)

mtcars %>% 
  convert(chr(mpg, am),
          int(carb))

열을 변환mpg그리고.am캐릭터와 열에carb정수로:

# A tibble: 32 x 11
   mpg     cyl  disp    hp  drat    wt  qsec    vs am     gear  carb
   <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <int>
 1 21        6  160    110  3.9   2.62  16.5     0 1         4     4
 2 21        6  160    110  3.9   2.88  17.0     0 1         4     4
 3 22.8      4  108     93  3.85  2.32  18.6     1 1         4     1
 4 21.4      6  258    110  3.08  3.22  19.4     1 0         3     1

데이터 프레임을 다음 기능으로 전달하기만 하면 됩니다.

data_types <- function(frame) {
  res <- lapply(frame, class)
  res_frame <- data.frame(unlist(res))
  barplot(table(res_frame), main="Data Types", col="steelblue", ylab="Number of Features")
}

데이터 프레임의 모든 데이터 유형에 대한 그림을 만듭니다.홍채 데이터 세트의 경우 다음을 얻을 수 있습니다.

data_types(iris)

enter image description here

다른 옵션은 purr 패키지의 지도 기능을 사용하는 것입니다.

library(purrr)
map(df,class)

명확하게 명시되지 않았기 때문에, 저는 다음과 같이 덧붙입니다.

저는 모든 데이터 유형의 발생 횟수를 저장하는 테이블을 만드는 방법을 찾고 있었습니다.

있다고 치자.data.frame두 개의 숫자 열과 하나의 논리 열을 사용합니다.

dta <- data.frame(a = c(1,2,3), 
                  b = c(4,5,6), 
                  c = c(TRUE, FALSE, TRUE))

그것으로 각 데이터 유형의 열 수를 요약할 수 있습니다.

table(unlist(lapply(dta, class)))
# logical numeric 
#       1       2 

열이 많은 경우 개요를 빠르게 확인하려면 이 방법이 매우 유용합니다.

신용 공여하기이 솔루션은 @Cybernetic의 답변에서 영감을 얻었습니다.

편리한 데이터 프레임을 위해 기본에 간단한 기능이 있습니다.

col_classes <- function(df) {
  data.frame(
  variable = names(df),
  class = unname(sapply(df, class))
  )
}
col_classes(my.data)
  variable     class
1        y   numeric
2       x1   integer
3       x2   logical
4       X3 character

도움말의 일부인 기능은 다음과 같습니다.데이터 프레임에 있는 모든 다양한 데이터 유형의 목록과 해당 유형과 관련된 특정 변수 이름을 반환하는 RFunctions 패키지.

install.package('devtools') # Only needed if you dont have this installed.
library(devtools)
install_github('adam-m-mcelhinney/helpRFunctions')
library(helpRFunctions)
my.data <- data.frame(y=rnorm(5), 
                  x1=c(1:5), 
                  x2=c(TRUE, TRUE, FALSE, FALSE, FALSE),
                  X3=letters[1:5])
t <- list.df.var.types(my.data)
t$factor
t$integer
t$logical
t$numeric

그러면 당신은 다음과 같은 것을 할 수 있습니다.var(my.data[t$numeric]).

이것이 도움이 되기를 바랍니다!

frame으로 csv 파일을 .summary.default

summary.default(mtcars)

     Length Class  Mode   
mpg  32     -none- numeric
cyl  32     -none- numeric
disp 32     -none- numeric
hp   32     -none- numeric
drat 32     -none- numeric
wt   32     -none- numeric
qsec 32     -none- numeric
vs   32     -none- numeric
am   32     -none- numeric
gear 32     -none- numeric
carb 32     -none- numeric

유형 및 클래스가 포함된 멋진 Tibble을 얻으려면:

  purrr::map2_df(mtcars,names(mtcars), ~ {
    tibble(
      field = .y,
      type = typeof(.x),
      class_1 = class(.x)[1],
      class_2 = class(.x)[2]
    )
    })

언급URL : https://stackoverflow.com/questions/21125222/determine-the-data-types-of-a-data-frames-columns

반응형