使用stringsAsFactors = FALSE创建空数据框

时间:2014-01-29 22:33:21

标签: r

我正在尝试创建一个空数据框,其中数据将是字符串,并且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

但是,我想要一个空的数据框。但是,当我这样做时,它会将我后来添加的字符串视为因素:

> 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

如何在没有字符串因子的情况下创建空数据框?

2 个答案:

答案 0 :(得分:5)

rbind.data.frame首先删除所有零行和零列data.frames,然后将其余参数强制转换为data.frames。此内部强制使用强制中default的{​​{1}}值。 (请参阅stringsAsFactorsrbind的帮助。

您可以通过设置

来设置此值
data frame methods

答案 1 :(得分:0)

我一直在寻找这个问题的答案,找不到任何东西,所以我写了自己的函数:

row.add <- function(x,newRow)
{
  cn <- colnames(x)
  x <- data.frame(lapply(x,as.character),stringsAsFactors = FALSE)
  x <- rbind(x,newRow)
  colnames(x) <- cn

  return(x)
}

df <- data.frame("a"=character(),"b"=character())
df <- row.add(df,c("A","Z"))
df <- row.add(df,c("B","X"))

希望有人搜索类似的答案会发现这很有用。