1

这似乎与帮助文件中写的相反:

“如果将列表、数据框或矩阵传递给 data.frame,就好像每个组件或列都作为单独的参数传递”

那么我做错了什么?

示例代码:

d <- c("bla", "bla", "blou", "blou", "bli")
dtest <- data.frame(d, stringsAsFactors=FALSE)
dtest2 <- data.frame(dtest, stringsAsFactors=TRUE)
dtest3 <- data.frame(dtest[[1]], stringsAsFactors=TRUE)

str(c(dtest2, dtest3))

一个是字符向量,另一个已转换为因子(遵循 stringsAsFactor=TRUE 行为)。它们“应该”是两个因素。

我实际上想使用 data.frame(df) 将具有某些字符列的现有数据框转换为具有相应因子的数据框。

4

1 回答 1

2

这样做:dtest <- data.frame(d, stringsAsFactors=FALSE)不设置阻止对 data.frame 的后续调用应用默认 stringsAsFactors-behavior 的属性。您可以通过设置来实现这种状态:

  options(stringsAsFactors=FALSE)

另一方面,如果您希望有类似的行为,则应将整个列发送到 data.frame:

> dtest2 <- data.frame(dtest)
> dtest3 <- data.frame(dtest[1])
> 
> str(c(dtest2, dtest3))
List of 2
 $ d: chr [1:5] "bla" "bla" "blou" "blou" ...
 $ d: chr [1:5] "bla" "bla" "blou" "blou" ...

如果您想重新评估数据框的所有列,那么我想您可以这样做:

data.frame(lapply(dtest, as.vector) )

> str(data.frame(lapply(dtest, as.vector) ))
'data.frame':   5 obs. of  1 variable:
 $ d: Factor w/ 3 levels "bla","bli","blou": 1 1 3 3 2
于 2013-04-23T19:28:58.927 回答