测试数据是数字还是因子/序数

时间:2014-04-23 10:16:53

标签: r types

我坐在一个大型数据集中,希望得到关于我的变量的基本信息,首先是它们是数字还是因子/序数。

我正在使用一个函数,并希望一次一个变量,调查它是数字还是因子。

要使for循环工作,我正在使用dataset [i]来获取我想要的变量。

object<-function(dataset){

    n=ncol(dataset)
    for(i in 1:n){
       variable_name<-names(dataset[i])
       factor<-is.factor(dataset[i])
       rdered<-is.ordered(dataset[i])
       numeric<-is.numeric(dataset[i])
       print(list(variable_name,factor,ordered,numeric))
    }
}

is.ordered 我的问题是is.numeric()似乎不适用于dataset [i],所有结果都变为“FALSE”,但仅限于数据集$。

你知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

尝试使用str(dataset)获取有关对象的摘要信息,但要解决您的问题,您需要使用双方括号提取数据。单方括号子集将输出保持为子列表(或data.frame),而不是提取内容:

str(iris)
'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
is.numeric(iris[1])
[1] FALSE
class(iris[1])
[1] "data.frame"
is.numeric(iris[[1]])
[1] TRUE

答案 1 :(得分:0)

假设dataset类似于data.frame,您可以执行以下操作(并避免循环):

names = sapply(dataset, names) # or simply `colnames(dataset)`
types = sapply(dataset, class)

然后types会为您提供numericfactor。然后你可以简单地做这样的事情:

is_factor = types == 'factor'