我正在尝试创建一个空数据框,其中数据将是字符串,并且stringsAsFactors设置为FALSE.但是,当我这样做时,它似乎不记得stringsAsFactors的值.
如果我创建一个空行,它可以工作,如下所示:
> df <- data.frame(a="", b="", stringsAsFactors=FALSE)
> new.row <- c("a", "z")
> df <- rbind(df, new.row)
> df
a b
1
2 a z
> df[2,1] <- "q"
> df
a b
1
2 q z
Run Code Online (Sandbox Code Playgroud)
但是,我想要一个空的数据框.但是,当我这样做时,它会将我后来添加的字符串视为因素:
> df2 <- data.frame(a=character(), b=character(), stringsAsFactors=FALSE)
> df2 <- rbind(df2, new.row)
> df2
X.a. X.z.
1 a z
> df2[2,1] <- "q"
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "q") :
invalid factor level, NA generated
Run Code Online (Sandbox Code Playgroud)
如何在没有字符串因子的情况下创建空数据框?
rbind.data.frame首先删除所有零行和零列data.frames,然后将其余参数强制转换为data.frames.这种内部强制使用强制中的default值stringsAsFactors.(见的帮助rbind下data frame methods.
您可以通过设置来设置此值
options(stringsAsFactors=FALSE)
# now it works as you wish
str(rbind(df2,new.row))
# 'data.frame': 1 obs. of 2 variables:
# $ X.a.: chr "a"
# $ X.z.: chr "z"
Run Code Online (Sandbox Code Playgroud)