我试图通过从特定列中具有相同值的每组行中删除一行以外的所有行来折叠数据框。换句话说,就是每组的第一行。例如,我...
我试图通过从特定列中具有相同值的每组行中删除一行以外的所有行来折叠数据框。换句话说,就是每组的第一行。
例如,我想转换这个
> d = data.frame(x=c(1,1,2,4),y=c(10,11,12,13),z=c(20,19,18,17))
> d
x y z
1 1 10 20
2 1 11 19
3 2 12 18
4 4 13 17
变成这样:
x y z
1 1 11 19
2 2 12 18
3 4 13 17
我目前正在使用聚合来执行此操作,但是当数据较多时,性能是不可接受的:
> d.ordered = d[order(-d$y),]
> aggregate(d.ordered,by=list(key=d.ordered$x),FUN=function(x){x[1]})
我已尝试使用与此处相同的函数参数进行 split/unsplit,但 unsplit 会抱怨行号重复。
rle 有可能吗?是否有一个 R 习语可以将 rle 的长度向量转换为每次运行开始的行的索引,然后我可以使用该习语从数据框中抽出这些行?