1

我正在尝试使用熔化和铸造过程重塑包含一个因子和一个数字变量的数据框。以下数据显示了我的问题:

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,而是字符串(< NA> 而不是 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>

但是,如果我忽略 NA 是正常 NA 的因素:

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

当我尝试使用我的重铸数据时,字符串 NA 给我带来了问题。当我想要融化和重铸的数据框中有一个因子和数值变量时,如何获得正确的 NA?

谢谢,

4

1 回答 1

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>
于 2013-06-06T16:02:12.037 回答