5

我刚刚开始超越 R 的基础知识,并且已经到了需要一些帮助的地步。我想重组一些数据。以下是示例数据框的外观:

ID  Sex Res Contact
1   M   MA  ABR
1   M   MA  CON
1   M   MA  WWF
2   F   FL  WIT
2   F   FL  CON
3   X   GA  XYZ

我希望数据看起来像:

ID  SEX Res ABR CON WWF WIT XYZ
1   M   MA  1   1   1   0   0
2   F   FL  0   1   0   1   0
3   X   GA  0   0   0   0   1

我有哪些选择?我将如何在 R 中做到这一点?

简而言之,我希望保留 CONT 列的值并将它们用作重构数据框中的列名。我想保持一组可变的列不变(在上面的例子中,我保持 ID、Sex 和 Res 不变)。

另外,是否可以控制重组数据中的值?我可能想将数据保留为二进制。我可能希望某些数据的值是每个 ID 的每个联系人值存在的次数。

4

2 回答 2

12

reshape包是你想要的。此处的文档:http: //had.co.nz/reshape/。不要自吹自擂,但我也在这里写了一些关于reshape's 使用的笔记:http ://www.ling.upenn.edu/~joseff/rstudy/summer2010_reshape.html

出于您的目的,此代码应该可以工作

library(reshape)
data$value <- 1
cast(data, ID + Sex + Res ~ Contact, fun = "length")
于 2010-08-12T18:01:20.763 回答
2

model.matrix效果很好(这是最近被问到的,gappy 有这个很好的答案):

> model.matrix(~ factor(d$Contact) -1)
  factor(d$Contact)ABR factor(d$Contact)CON factor(d$Contact)WIT factor(d$Contact)WWF factor(d$Contact)XYZ
1                    1                    0                    0                    0                    0
2                    0                    1                    0                    0                    0
3                    0                    0                    0                    1                    0
4                    0                    0                    1                    0                    0
5                    0                    1                    0                    0                    0
6                    0                    0                    0                    0                    1
attr(,"assign")
[1] 1 1 1 1 1
attr(,"contrasts")
attr(,"contrasts")$`factor(d$Contact)`
[1] "contr.treatment"
于 2010-08-12T18:08:56.533 回答