在R中保留dcast中的变量

时间:2014-12-15 18:41:28

标签: r

我正在使用R中的dcast函数将长格式数据集转换为宽格式数据集。我有一个ID号码,一个分类变量(CAT)和一个连续变量(AMT)。但是,我还有一个变量SEX,它对于给定ID个数字的所有行都是相同的。此代码用于创建宽格式数据集,但我丢失了SEX。我该如何保留它?

PC1cast <- dcast(PC1, ID~CAT, value.var='AMT', fun.aggregate=sum, na.rm=TRUE)

如果我将SEX添加到ID~CAT行,则会为我提供SEX-CAT个组合。我希望SEX只是每行的一个值。

示例数据:

ID CAT AMT SEX 
1  A   46  Female 
1  B   22  Female 
1  C   31  Female 
2  A   17  Male 
2  B   25  Male 
2  C   44  Male

2 个答案:

答案 0 :(得分:2)

为此,您需要将SEX添加到公式的ID侧:

dcast(PC1, ID + SEX~CAT, value.var='AMT', fun.aggregate=sum, na.rm=TRUE)
# results in:

  ID    SEX  A  B  C
1  1 Female 46 22 31
2  2   Male 17 25 44

公式左侧的东西按原样保存,右侧的东西都是正确的。

答案 1 :(得分:1)

我添加了一些额外的数据行来澄清其中的一些部分。但要点是你只需要将SEX放在左侧(即~):

PC2 <- read.table(text="ID CAT AMT SEX 
1  A   46  Female 
1  B   22  Female 
1  C   31  Female 
2  A   17  Male 
2  B   25  Male 
2  C   44  Male
3  A   47  Female 
3  B   27  Female 
3  C   37  Female 
4  A   17  Male 
4  A   17  Male 
4  B   22  Male 
4  B   NA  Male 
4  C   44  Male", header=T)

library(reshape2)
PC1cast2 <- dcast(PC2, ID+SEX~CAT, value.var='AMT', fun.aggregate=sum, 
                  na.rm=TRUE)
PC1cast2
#   ID    SEX  A  B  C
# 1  1 Female 46 22 31
# 2  2   Male 17 25 44
# 3  3 Female 47 27 37
# 4  4   Male 34 22 44

在您的示例数据中,每个组合只有一个实例而没有NA,因此fun.aggregate=sum, na.rm=TRUE不执行任何操作。当一些是重复的(例如,有两个4 A和两个4 B s)时,将对这些值求和,但首先删除NA s。确保这是你想要的。