gpt4 book ai didi

r - 根据列条目(或排名)对数据框进行子集化

转载 作者:行者123 更新时间:2023-12-02 20:35:23 24 4
gpt4 key购买 nike

我有一个像这样简单的 data.frame:

id group idu  value
1 1 1_1 34
2 1 2_1 23
3 1 3_1 67
4 2 4_2 6
5 2 5_2 24
6 2 6_2 45
1 3 1_3 34
2 3 2_3 67
3 3 3_3 76

从我想要检索每个组的第一个条目的子集;像这样:

id group idu value
1 1 1_1 34
4 2 4_2 6
1 3 1_3 34

id 不是唯一的,因此该方法不应依赖它。

我可以实现避免循环吗?

data <- data.frame(
id = c(1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L),
group = rep(1:3, each = 3L),
idu = factor(c("1_1", "2_1", "3_1", "4_2", "5_2", "6_2", "1_3", "2_3", "3_3")),
value = c(34L, 23L, 67L, 6L, 24L, 45L, 34L, 67L, 76L)
)

最佳答案

使用 Gavin 的百万行 df:

DF3 <- data.frame(id = sample(1000, 1000000, replace = TRUE),
group = factor(rep(1:1000, each = 1000)),
value = runif(1000000))
DF3 <- within(DF3, idu <- factor(paste(id, group, sep = "_")))

我认为最快的方法是对数据框重新排序,然后使用重复:

system.time({
DF4 <- DF3[order(DF3$group), ]
out2 <- DF4[!duplicated(DF4$group), ]
})
# user system elapsed
# 0.335 0.107 0.441

相比之下,我的计算机上 Gavin 的 fastet lapply + split 方法需要 7 秒。

通常,在处理数据帧时,最快的方法通常是生成所有索引,然后执行单个子集。

关于r - 根据列条目(或排名)对数据框进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5805271/

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