重塑因素

时间:2013-04-16 17:56:05

标签: r reshape

我正在尝试使用融合和强制转换程序重塑包含因子和数字变量的数据框。以下数据显示了我的问题:

library(reshape)

df <- as.data.frame(cbind(c(1,1,2,2,3,3),c(2000,2001,2001,2002,2000,2001),c(2,1,4,3,1,5)))   
names(df) <- c("Id","Year","Var")

df$Fac <- interaction(c(1,1,1,0,0,0),c(0,0,0,1,1,1),drop=TRUE)

MData <- melt.data.frame(df,id=c("Year","Id"))
RSData <- cast(MData, Id ~ Year | ...)

该操作有效,但RSData中缺少的观察结果不是它们应该是的NA,而是字符串(&lt; NA&gt;而不是NA):

$Var
  Id 2000 2001 2002
1  1    2    1 <NA>
2  2 <NA>    4    3
3  3    1    5 <NA>

$Fac
  Id 2000 2001 2002
1  1  1.0  1.0 <NA>
2  2 <NA>  1.0  0.1
3  3  0.1  0.1 <NA>

但是,如果我忽视了这个因素,那么NAs就是正常的NAs:

df <- as.data.frame(cbind(c(1,1,2,2,3,3),c(2000,2001,2001,2002,2000,2001),c(2,1,4,3,1,5)))   
names(df) <- c("Id","Year","Var")

MData <- melt.data.frame(df,id=c("Year","Id"))
RSData <- cast(MData, Id ~ Year | ...)

输出变为:

$Var
  Id 2000 2001 2002
1  1    1    1   NA
2  2   NA    1    0
3  3    0    0   NA

当我尝试使用重铸数据时,字符串NAs会给我带来麻烦。当我想要融合和重铸的数据框中有因子和数字变量时,如何获得正确的NA?

谢谢,

中号

1 个答案:

答案 0 :(得分:0)

我有信心通过一遍又一遍地阅读评论和文档,找到了我自己问题的答案。基本上,问题是当使用melt.data.frame()方法时,所有变量值都放在1列中,因为我有字符串和数值,数值会隐式转换为字符串。

我看到的唯一方法是分别重塑数值变量和因子:

MDataNum = melt.data.frame(df[c("Id","Year","Var")],id=c("Year","Id"))
RSDataNum <- cast(MDataNum, Id ~ Year | ...)

MDataFac = melt.data.frame(df[c("Id","Year","Fac")],id=c("Year","Id"))
RSDataFac <- cast(MDataFac, Id ~ Year | ...)

结果变为:

> RSDataNum 
$Var
  Id 2000 2001 2002
1  1    2    1   NA
2  2   NA    4    3
3  3    1    5   NA

> RSDataFac 
$Fac
  Id 2000 2001 2002
1  1  1.0  1.0 <NA>
2  2 <NA>  1.0  0.1
3  3  0.1  0.1 <NA>