数据类型是R中的因子

时间:2018-02-09 09:56:40

标签: r

我在理解R中的数据结构时遇到了问题。

key_stats <- data.frame(X= character(),
                    Y= character())

我想创建一个数据框并用数据填充它。这里尝试创建一个名为key_stats的数据框,我想用文本字符串填充它。

key_stats[1,1] <- "test"
key_stats[1,2] <- "test"

但是没有..它给了我一个警告,并没有用text:

填充data.frame
key_stats[1,2] <- "test" 
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "test") :
  invalid factor level, NA generated

令我印象深刻的是尽管我明确表示key_stats是字符R正在将数据类型更改为factor。

解决方法很简单:

key_stats [,1] <- as.character(key_stats[,1])
key_stats [,2] <- as.character(key_stats[,2])

但是发生了什么..为什么R会改变对象的数据类型?

2 个答案:

答案 0 :(得分:3)

尝试创建数据框,并将stringsAsFactors选项设置为FALSE

key_stats <- data.frame(X=character(),
                        Y=character(),
                        stringsAsFactors=FALSE)

如果您刚开始使用R,处理因素可能会非常令人头痛。如果您想知道为什么因素存在,那么存储效率和数据标准化就是一个问题。想象一下,你有一个包含大量重复数据的字符列。存储重复信息是浪费的。因素有帮助,因为级别存储在列中,因此实际文本只存储在其他地方。

许多其他语言也有这个概念,例如Java或MySQL中的枚举类型。

答案 1 :(得分:1)

@Tim Biegeleisen给出了最直接的答案。

您可能还想考虑从数据帧移动到tibbles,其中默认情况下不会将字符变量转换为因子

library(dplyr)
key_stats <- tribble(~X,~Y,"test","test")

> str(key_stats)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   1 obs. of  2 variables:
 $ X: chr "test"
 $ Y: chr "test"