我使用R并使用read.csv()将数据加载到数据帧中。如何确定数据帧中每一列的数据类型?
当前回答
sapply(yourdataframe, class)
你的dataframe是你正在使用的数据帧的名称
其他回答
因为说得不清楚,我补充一下:
我正在寻找一种方法来创建一个表,其中保存所有数据类型的出现次数。
假设我们有一个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的答案。
简单地传递你的数据帧到下面的函数:
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)
为了方便使用数据框架,这里有一个简单的base函数
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
另一种选择是使用purrr包的map函数。
library(purrr)
map(df,class)
对于小数据帧:
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
推荐文章
- 在编写自己的函数时,如何使用R的省略号特性?
- 当我的ggplot2语法合理时,我如何处理R CMD检查“全局变量无可见绑定”注释?
- 如何解窝(爆炸)在一个熊猫数据帧列,成多行
- 如何将表转换为数据帧
- 转换data.frame列到向量?
- IEEE 754浮点数不能精确表示的第一个整数是哪一个?
- c++中size_t和int的区别是什么?
- 如何将颜色分配给ggplot2中具有稳定映射的类别变量?
- 在基础图形的绘图区域之外绘制一个图例?
- 我看到VARCHAR(255)如此频繁地使用(而不是其他长度),有什么好的原因吗?
- 根据Pandas中的另一列提取列值
- 在ggplot2中的各个facet上注释文本
- 返回类型为'?:'(三元条件运算符)
- 如何比较Python中对象的类型?
- 确定数据帧列的数据类型