R,从数据框中获得每个类别的顶部?

时间:2012-11-15 21:33:17

标签: r plyr

我有以下数据框

id,category,value
A,21,0.89
B,21,0.73
C,21,0.61
D,12,0.95
E,12,0.58
F,12,0.44
G,23,0.33

注意,它们已经按每个值(id,类别)中的值排序。我希望能够做的是从每个(id,category)获取顶部并创建一个字符串,然后是每个(id,category)中的第二个,依此类推。因此,对于上面的示例,它看起来像

A,D,G,B,E,C,F

有没有办法在R中轻松完成?或者我最好依靠Perl脚本来做它?

非常感谢提前

1 个答案:

答案 0 :(得分:4)

这似乎有效,但我确信我们可以稍微简化它,特别是如果您能够放宽您的订购要求:

library(plyr)
d <- read.table(text = "id,category,value
 A,21,0.89
 B,21,0.73
 C,21,0.61
 D,12,0.95
 E,12,0.58
 F,12,0.44
 G,23,0.33",sep = ',',header = TRUE)
d <- ddply(d,.(category),transform,r = seq_along(category))
d <- arrange(d,id)
> paste(d$id[order(d$r)],collapse = ",")
[1] "A,D,G,B,E,C,F"

此版本可能更有利于订购,并避免 plyr

d$r <- unlist(sapply(rle(d$category)$lengths,seq_len))
d$s <- 1:nrow(d)
with(d,paste(id[order(r,s)],collapse = ","))