【问题标题】:Factors being changed to numeric when I don't want them to be, when moving data from one dataframe to another将数据从一个数据框移动到另一个数据框时,当我不希望它们更改为数字时
【发布时间】:2012-08-02 15:59:40
【问题描述】:

我有一个包含数值变量和因子的数据框。

当将数据从一个数据帧移动到另一个数据帧时,一切都按我的意愿保存:

copy_data<-as.data.frame(original_data)

这将创建一个包含因子剩余因子的“original_data”副本。

当我尝试更复杂的版本时,最终结果是数值数据框,而我希望因子仍然是因子:

model_data<-with(subset(copy_data, copy_data$var1<0), 
as.data.frame(cbind(var1, var2, var3, factor1, factor2, factor3)))

所以 factor1、factor2 和 factor3 最终都是数字而不是因数。我错过了什么?我尝试过使用和不使用as.data.frame,并在填充之前将 model_data 定义为数据框。

我对 StackExchange 存档的搜索主要返回关于故意将因素更改为变量的结果,并且对我没有多大帮助。略显笨拙的标题是为了将我的问题与那些问题区分开来。

【问题讨论】:

  • 欢迎来到 StackOverflow。也许如果您制作了一个 reproducible example 来展示您的问题/问题,人们会发现它更容易回答。在您的案例中,一个可重现的示例将包含一些演示问题的示例数据。

标签: r dataframe subset with-statement


【解决方案1】:

?cbind 表示,如果所有输入都是向量(在您的情况下是向量),cbind 返回一个矩阵。一个矩阵只能包含单个 atomic 类型(字符、数字、逻辑等)。因子不是原子类型,因此它们会被转换。

“数据框方法”部分说cbind data.frame 方法只是包装了data.frame(..., check.names=FALSE),因此您可以直接调用data.frame(对cbind 的调用是多余的)。

model_data <- with(subset(copy_data, copy_data$var1<0), 
  data.frame(var1, var2, var3, factor1, factor2, factor3))

【讨论】:

  • 太棒了,完美运行——在阅读了as.data.frame 文档后,我认为cbind 是必要的,但没想过要尝试,只是尝试c,这显然不是工作。
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多