gpt4 book ai didi

r - 在连续组上多次使用 setdiff() 而不使用 for 循环

转载 作者:行者123 更新时间:2023-12-04 19:31:11 24 4
gpt4 key购买 nike

我要setdiff连续组之间没有循环,如果可能的话,使用数据表方式或应用系列的功能。

数据框 df :

   id group
1 L1 1
2 L2 1
3 L1 2
4 L3 2
5 L4 2
6 L3 3
7 L5 3
8 L6 3
9 L1 4
10 L4 4
11 L2 5

我想知道连续组之间有多少新 ID。因此,例如,如果我们比较组 1 和组 2,则有两个新 ID: L3L4所以它返回 2(不是直接用 setdiff 而是用 length() ),如果我们比较第 2 组和第 3 组, L5L6是新闻 ID,所以它返回 2,依此类推。

预期成绩 :
new_id
2
2
2
1

数据 :
structure(list(id = structure(c(1L, 2L, 1L, 3L, 4L, 3L, 5L, 6L, 
1L, 4L, 2L), .Label = c("L1", "L2", "L3", "L4", "L5", "L6"), class = "factor"),
group = c(1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5)), class = "data.frame", row.names = c(NA,
-11L), .Names = c("id", "group"))

最佳答案

这是 mapply 的选项:

lst <- with(df, split(id, group))   
mapply(function(x, y) length(setdiff(y, x)), head(lst, -1), tail(lst, -1))

#1 2 3 4
#2 2 2 1

关于r - 在连续组上多次使用 setdiff() 而不使用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43258333/

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