在创建 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 回答
这在评论中基本得到了解答,但我会在这里给出答案来解决问题 .
当您使用
data.frame()
创建data.frame时,该函数实际操作您传入的参数以创建data.frame对象 . 具体来说,默认情况下,它有一个名为stringsAsFactors=TRUE
的参数,因此它将获取您传入的所有字符向量并将它们转换为因子向量,因为通常您会在各种统计测试中将这些值视为分类随机变量,并且它可以更有效地存储如果您有许多在向量中重复的值,则将字符值作为因子 .请注意,data.frame本身不记得构造期间使用的"stringsAsFactors"值 . 这仅在您实际运行
data.frame()
时使用 . 因此,如果您通过$<-
语法或cbind()
分配列来添加列,则不会发生强制如果要将列添加为因子,则需要自行转换为因子