这似乎与帮助文件中的内容相反:
"如果将列表或数据框或矩阵传递给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行为)。他们&#34;应该&#34;是两个因素。
我实际上想使用data.frame(df)将具有某些字符列的现有数据帧转换为具有相应因子的数据帧。
答案 0 :(得分: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