提问人:Btibert3 提问时间:8/13/2010 最后编辑:FerdiBtibert3 更新时间:12/21/2016 访问量:2851
在 R 中重构数据
Restructure Data in R
问:
我刚刚开始超越 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、和 Res 不变)。
另外,是否可以控制重构数据中的值?我可能希望将数据保留为二进制数据。我可能希望一些数据的值是每个 ID 的每个联系人值存在的次数。
答:
12赞
JoFrhwld
8/13/2010
#1
套餐就是你想要的。文档在这里:http://had.co.nz/reshape/。不是为了吹嘘我自己的喇叭,但我也在这里写了一些关于 的用法的说明: http://www.ling.upenn.edu/~joseff/rstudy/summer2010_reshape.htmlreshape
reshape
出于您的目的,此代码应该有效
library(reshape)
data$value <- 1
cast(data, ID + Sex + Res ~ Contact, fun = "length")
评论
0赞
Daniel Dickison
8/13/2010
我已经使用 R 很长时间了,我从来不知道你可以做 data$value <- 1 而不是 data$value <- rep(1, nrow(data))。简直不敢相信我从来没有尝试过——这总是有效吗?
0赞
JoFrhwld
8/13/2010
@Daniel 你也应该尝试data$variable <- 1; data$variable[data$Group == "A"] <- 2
0赞
Btibert3
8/13/2010
我知道 Hadley 的重塑方案可能是答案,但我很难理解它。在您的代码中,赋值为 1 的 data$value 有什么作用?
0赞
JoFrhwld
8/13/2010
对于 ,它所指的一定有某个测量值。该公式定义“矩阵”,然后查找适合每个单元格的所有值。默认情况下,它会在名为 的列中查找值,但您可以覆盖它。我必须添加一列,因为在定义矩阵后,没有与测量值对应的列,所以我创建了一个虚拟列。如果每个单元格的值数 <= 1,则用该值填充单元格。否则,默认情况下,它会根据某个函数聚合值。reshape
value
value
cast
length
0赞
JoFrhwld
8/13/2010
我定义了一个聚合函数,因为否则,没有观测值的单元格将被填充。如果需要,请使用 聚合值。NA
0
value
length
2赞
Vince
8/13/2010
#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"
评论
0赞
Vince
8/13/2010
哎呀!误解了这个问题。你可以先用我的答案,然后再用,但 JoFrhwld 的答案更容易。tapply
上一个:重塑错误 - 无效因子
下一个:保护装配体免受黑客攻击
评论