我有以下数据框
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脚本来做它?
非常感谢提前
答案 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 = ","))