首页 > 解决方案 > R如何知道来自给定数据帧的什么样的数据被视为一个因素?

问题描述

考虑到来自 Kaggle ( https://www.kaggle.com/c/titanic/data ) 上可用的泰坦尼克号数据集的给定数据,我试图找出 R 上每个列的数据类型。它返回乘客姓名、性别和票号的因子数据类型。它返回年龄的数字数据类型。为什么它不将年龄列表视为整数甚至因子?年龄确实在数据集中重复。他们不能认为是不同的层次吗?

我使用该str()函数返回 R 中的数据类型。

str(test.survived)
 $ Age        : num  34.5 47 62 27 22 14 30 26 18 21 ...
 $ Ticket     : Factor w/ 363 levels "110469","110489",..: 153 222 74 148 139 262 159 85 101 270 ...

.

str(test.survived)

输出:

    'data.frame':   418 obs. of  12 variables:
 $ survived   : Factor w/ 1 level "None": 1 1 1 1 1 1 1 1 1 1 ...
 $ PassengerId: int  892 893 894 895 896 897 898 899 900 901 ...
 $ Pclass     : int  3 3 2 3 3 3 3 2 3 3 ...
 $ Name       : Factor w/ 418 levels "Abbott, Master. Eugene Joseph",..: 210  
                409 273 414 182 370 85 58 5 104 ...
 $ Sex        : Factor w/ 2 levels "female","male": 2 1 2 2 1 2 1 2 1 2 ...
 $ Age        : num  34.5 47 62 27 22 14 30 26 18 21 ...
 $ SibSp      : int  0 1 0 0 1 0 0 1 0 2 ...
 $ Parch      : int  0 0 0 0 1 0 0 1 0 0 ...
 $ Ticket     : Factor w/ 363 levels "110469","110489",..: 153 222 74 148 139 
                262 159 85 101 270 ...
 $ Fare       : num  7.83 7 9.69 8.66 12.29 ...
 $ Cabin      : Factor w/ 77 levels "","A11","A18",..: 1 1 1 1 1 1 1 1 1 1 
                 ...
 $ Embarked   : Factor w/ 3 levels "C","Q","S": 2 3 2 3 3 3 2 3 1 3 ...

据我了解,因子用于具有重复值的数据集,因此将它们分类为级别。就像票号,舱位类型一样,年龄也有重复。但是 R 并不认为年龄是一个因素,而是为其分配了一个数字数据类型。我知道它不能是整数类型,因为那里有一些浮动数据值。但为什么不考虑因素?

标签: r

解决方案


读取数据的方式取决于您用来执行此操作的函数以及您指定的任何参数。

如果您使用类似的东西read.csv(),那么它使用该函数type.convert()来设置每列的数据类型。从笔记

给定一个向量,该函数尝试将其转换为逻辑、整数、数字或复数,如果失败则将字符向量转换为因子,除非 as.is = TRUE。选择可以接受所有非缺失值的第一个类型。

该函数按顺序遍历类类型以计算出该列应该是什么。因此,仅当无法分配数字类别时才会使用因子类型。在本例中,它是一个数字列。

更多信息

通常,人们不希望将他们的字符列作为因素读入。为避免这种情况,stringsAsFactors = FALSE请在读取 csv 时使用。

如果您希望您的数字列成为因素,那么您可以使用

test.survived$Age <- as.factor(test.survived$Age)

例如。


推荐阅读