确定数据框列的数据类型

sta*_*010 135 types r dataframe

我正在使用R并使用将数据加载到数据帧中read.csv().如何确定数据框中每列的数据类型?

gun*_*ica 191

你最好的选择是使用?str().为了探索一些例子,让我们做一些数据:

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])
Run Code Online (Sandbox Code Playgroud)

@Wilmer E Henao H的解决方案非常精简:

sapply(my.data, class)
        y        x1        x2        X3 
"numeric" "integer" "logical"  "factor" 
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

@Gavin Simpson的方法也得到了简化,但提供的信息略有不同class():

sapply(my.data, typeof)
       y        x1        x2        X3 
"double" "integer" "logical" "integer"
Run Code Online (Sandbox Code Playgroud)

有关详细信息class,typeof以及中间的孩子,mode请参阅该SO优秀的线程:该类型的东西的河"模式"和"类"和"typeof运算"一个全面的调查是不够的.

  • 使用 R 几个月后,我发现“str(dataframe)”是一目了然地确定列类型的最快方法。其他方法需要更多的击键并且不会显示那么多信息,但如果列数据类型是其他函数的输入,则它们会很有帮助。 (2认同)

Wil*_*nao 42

sapply(yourdataframe, class)
Run Code Online (Sandbox Code Playgroud)

您的数据框是您正在使用的数据框的名称


Rei*_*son 17

我会建议

sapply(foo, typeof)
Run Code Online (Sandbox Code Playgroud)

如果您需要数据框中的矢量的实际类型.class()有点不同的野兽.

如果您不需要将此信息作为向量(即您不需要以后以编程方式执行其他操作),请使用str(foo).

在这两种情况下foo都将替换为数据框的名称.


Cyb*_*tic 7

只需将数据框传递到以下函数:

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")
}
Run Code Online (Sandbox Code Playgroud)

生成数据框中所有数据类型的图.对于虹膜数据集,我们得到以下结果:

data_types(iris)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 6

另一种选择是使用 purrr 包的 map 函数。

library(purrr)
map(df,class)
Run Code Online (Sandbox Code Playgroud)


dav*_*job 5

对于小数据框:

library(tidyverse)

as_tibble(mtcars)
Run Code Online (Sandbox Code Playgroud)

给你打印出带有数据类型的 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
Run Code Online (Sandbox Code Playgroud)

对于大数据框:

glimpse(mtcars)
Run Code Online (Sandbox Code Playgroud)

为您提供数据类型的结构化视图:

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, ...
Run Code Online (Sandbox Code Playgroud)

要获取列的数据类型列表(如上面@Alexandre 所述):

map(mtcars, class)
Run Code Online (Sandbox Code Playgroud)

给出数据类型列表:

$mpg
[1] "numeric"

$cyl
[1] "numeric"

$disp
[1] "numeric"

$hp
[1] "numeric"
Run Code Online (Sandbox Code Playgroud)

要更改列的数据类型:

library(hablar)

mtcars %>% 
  convert(chr(mpg, am),
          int(carb))
Run Code Online (Sandbox Code Playgroud)

将列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
Run Code Online (Sandbox Code Playgroud)