在将数据从一个数据帧移动到另一个数据帧时,当我不希望它们被更改为数字时的因素

时间:2012-08-02 15:59:41

标签: r dataframe subset with-statement

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

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

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归档文件的搜索主要是关于故意改变变量因素的结果,并且对我没什么帮助。略显笨重的标题是为了区分我的问题。

1 个答案:

答案 0 :(得分:1)

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

“数据框架方法”部分说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))