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) の 2 番目などを作成することです。したがって、上記の例では次のようになります

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 に答える