我正在使用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
答案 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。确保这是你想要的。