gpt4 book ai didi

r - 通过为每组选择一行来折叠数据框

转载 作者:行者123 更新时间:2023-12-03 12:02:58 25 4
gpt4 key购买 nike

我试图通过从特定列中具有相同值的每组行中删除除一行之外的所有行来折叠数据框。换句话说,每个组的第一行。

例如,我想转换这个

> 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 的长度向量转换为每次运行开始的行的索引,然后我可以使用它从数据框中提取这些行?

最佳答案

也许 duplicated()可以帮助:

R> d[ !duplicated(d$x), ]
x y z
1 1 10 20
3 2 12 18
4 4 13 17
R>

编辑Shucks,没关系。这将在每个重复块中选择第一个,您想要最后一个。所以这是另一个尝试使用 plyr :
R> ddply(d, "x", function(z) tail(z,1))
x y z
1 1 11 19
2 2 12 18
3 4 13 17
R>

这里 plyr努力寻找唯一的子集,循环它们并应用提供的函数——它只返回块中的最后一组观察 z使用 tail(z, 1) .

关于r - 通过为每组选择一行来折叠数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2626567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com