列如何决定成为数据框中的 class 因素?
how is a column decided to be of class factor in a data frame?
在创建内容包含重复值的列时,我注意到以下有关因子的内容。
1.If 具有重复字符值的列在创建数据框时成为数据框的一部分,它具有 class 因素,但如果稍后追加同一列,它是 class 字符,尽管两种情况下的值相同。这是为什么?
#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"
这基本上在评论中得到了回答,但我会把答案放在这里以结束这个问题。
当您使用 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"
在创建内容包含重复值的列时,我注意到以下有关因子的内容。
1.If 具有重复字符值的列在创建数据框时成为数据框的一部分,它具有 class 因素,但如果稍后追加同一列,它是 class 字符,尽管两种情况下的值相同。这是为什么?
#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"
这基本上在评论中得到了回答,但我会把答案放在这里以结束这个问题。
当您使用 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"