我正在尝试创建一个空数据框,其中数据将是字符串,并且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
如何在没有字符串因子的情况下创建空数据框?
答案 0 :(得分:5)
rbind.data.frame
首先删除所有零行和零列data.frames
,然后将其余参数强制转换为data.frames。此内部强制使用强制中default
的{{1}}值。 (请参阅stringsAsFactors
下rbind
的帮助。
您可以通过设置
来设置此值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"))
希望有人搜索类似的答案会发现这很有用。