首页 文章

如何确定列是数据框中的类因子?

提问于
浏览
0

在创建 column whose contents contain duplicate values 时,我注意到以下因素 .

1.如果在创建数据帧时将具有重复字符值的列作为数据帧的一部分,则它是类因子,但是如果稍后添加相同的列,则它通过两种情况下的值都是类字符是相同的 . 为什么是这样?

#creating a data frame
name = c('waugh','waugh','smith')
age = c(21,21,27)
df = data.frame(name,age)

#adding a new column which has the same values as the 'name' column above, to the data frame
df$newcol = c('waugh','waugh','smith')

#you can see that the class'es of the two are different though the values are same
class(df$name)
## [1] "factor"
class(df$newcol)
## [1] "character"
  • 只有具有重复字母内容的列才成为一个因素;如果列包含重复的数值,则不会将其视为因子 . 这是为什么?我很可能意味着1-Male,0-Female,在这种情况下,它应该是一个因素?

请注意,这两列都包含重复值

class(df$name)
## [1] "factor"
class(df$age)
## [1] "numeric"

1 回答

  • 1

    这在评论中基本得到了解答,但我会在这里给出答案来解决问题 .

    当您使用 data.frame() 创建data.frame时,该函数实际操作您传入的参数以创建data.frame对象 . 具体来说,默认情况下,它有一个名为 stringsAsFactors=TRUE 的参数,因此它将获取您传入的所有字符向量并将它们转换为因子向量,因为通常您会在各种统计测试中将这些值视为分类随机变量,并且它可以更有效地存储如果您有许多在向量中重复的值,则将字符值作为因子 .

    df <- data.frame(name,age)
    class(df$name)
    # [1] "factor"
    df <- data.frame(name,age, stringsAsFactors=FALSE)
    class(df$name)
    # [1] "character"
    

    请注意,data.frame本身不记得构造期间使用的"stringsAsFactors"值 . 这仅在您实际运行 data.frame() 时使用 . 因此,如果您通过 $<- 语法或 cbind() 分配列来添加列,则不会发生强制

    df1 <- data.frame(name,age)
    df2 <- data.frame(name,age, stringsAsFactors=FALSE)
    df1$name2 <- name
    df2$name2 <- name
    df3 <- cbind(data.frame(name,age), name2=name)
    class(df1$name2)
    # [1] "character"
    class(df2$name2)
    # [1] "character"
    class(df3$name2) 
    # [1] "character"
    

    如果要将列添加为因子,则需要自行转换为因子

    df = data.frame(name,age)
    df$name2 <- factor(name)
    class(df$name2)
    # [1] "factor"
    

相关问题