我在理解R中的数据结构时遇到了问题。
key_stats <- data.frame(X= character(),
Y= character())
我想创建一个数据框并用数据填充它。这里尝试创建一个名为key_stats的数据框,我想用文本字符串填充它。
key_stats[1,1] <- "test"
key_stats[1,2] <- "test"
但是没有..它给了我一个警告,并没有用text:
填充data.framekey_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会改变对象的数据类型?
答案 0 :(得分:3)
尝试创建数据框,并将stringsAsFactors
选项设置为FALSE
:
key_stats <- data.frame(X=character(),
Y=character(),
stringsAsFactors=FALSE)
如果您刚开始使用R,处理因素可能会非常令人头痛。如果您想知道为什么因素存在,那么存储效率和数据标准化就是一个问题。想象一下,你有一个包含大量重复数据的字符列。存储重复信息是浪费的。因素有帮助,因为级别存储在列中,因此实际文本只存储在其他地方。
许多其他语言也有这个概念,例如Java或MySQL中的枚举类型。
答案 1 :(得分:1)
您可能还想考虑从数据帧移动到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"