1

我有以下数据框

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,category) 中的值排序。我想做的是从每个 (id,category) 中获取顶部并创建一个字符串,然后是每个 (id,category) 中的第二个,依此类推。所以对于上面的例子,它看起来像

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

有没有办法在 R 中轻松做到这一点?还是我最好依靠 Perl 脚本来做到这一点?

非常感谢提前

4

1 回答 1

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 = ","))
于 2012-11-15T21:47:24.617 回答