gpt4 book ai didi

r - 如何按组取前 5 行而不替换另一个变量值

转载 作者:行者123 更新时间:2023-12-05 00:51:56 25 4
gpt4 key购买 nike

我想弄清楚如何在不替换另一个变量值的情况下,一组只取前 5 行。
例如,如果现有数据表(或框架)如下所示:

id V1
1 101
1 102
1 103
1 104
1 105
1 106
1 107
1 108
1 109
1 110
2 101
2 103
2 105
2 107
2 108
2 109
2 110
2 111
2 112
2 101
3 104
3 105
3 107
3 108
3 109
3 110
3 101
3 102
3 103
3 104

但我只想为每个组获取前 5 行,但不替换跨组的 V1 值。所以我想要的结果表是...:
id V1
1 101
1 102
1 103
1 104
1 105
2 107
2 108
2 109
2 110
2 111
3 NA

我一直在尝试使用 for 循环来执行此操作,方法是一次遍历每个 id .... 为每个 id 取前 5 行,并在前一个 id 中排除以下具有 V1 值的行。但是由于我的数据非常大(id 的数量超过一百万),for 循环遍历所有 id 需要很长时间。

有没有比我更聪明的人来帮助我找到更好、更有效、更聪明的方法来处理这个问题?
非常感谢!

最佳答案

这是一个分三步走的选项:

# create a vector to store set values
x <- numeric()
# compute the values by id and update x in the process
res <- lapply(split(df$V1, df$id), function(y) {
y <- head(setdiff(y, x), 5)
x <<- union(x, y)
if(!length(y)) NA else y
})
# combine the result to data.frame
stack(res)
# values ind
#1 101 1
#2 102 1
#3 103 1
#4 104 1
#5 105 1
#6 107 2
#7 108 2
#8 109 2
#9 110 2
#10 111 2
#11 NA 3

关于r - 如何按组取前 5 行而不替换另一个变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43672429/

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