为什么data.frame不解析数据帧参数?

时间:2013-04-23 19:15:19

标签: r

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

  

"如果将列表或数据框或矩阵传递给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)将具有某些字符列的现有数据帧转换为具有相应因子的数据帧。

1 个答案:

答案 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