gpt4 book ai didi

r - 连续分类数据序列

转载 作者:行者123 更新时间:2023-12-01 15:52:33 25 4
gpt4 key购买 nike

我是 R 的新手,对向表中添加新变量有疑问。我的数据序列以 10 开头,以 20 结尾,出现了好几次。

有没有办法将这些序列连续分组?

例子:

列中的数据看起来像这样

10 3 15 15 19 19 20 20 10 10 11 17 20  ...

我想要这样的输出

10 group 1
3 group 1
15 group 1
15 group 1
19 group 1
19 group 1
20 group 1
20 group 1
10 group 2
10 group 2
11 group 2
17 group 2
20 group 2
...

是否可以编写类似的程序?

非常感谢您的帮助!

最佳答案

使用基础 R,您可以检测序列并使用 cumsumhead 创建分组变量:

df$grp <- cumsum(df$x == 10 & c(20, head(df$x, -1)) == 20)

给出:

> df
x grp
1: 10 1
2: 3 1
3: 15 1
4: 15 1
5: 19 1
6: 19 1
7: 20 1
8: 20 1
9: 10 2
10: 10 2
11: 11 2
12: 17 2
13: 20 2

这是做什么的:

  • df$x == 10 检测到 10
  • c(20, head(df$x, -1)) == 20检测前一个值是否等于20,第一个值设置为20 因为 df$x
  • 的第一个值有前面的值
  • 通过将这两个与 & 组合,您将获得一个逻辑值,指示 df$ 中的哪些值等于 10 以及前面的哪些值值也等于 20
  • 将其包装在 cumsum 中,您将获得一个分组值。

或者使用data.table:

library(data.table)
setDT(df)[, grp := cumsum(x == 10 & c(0, head(x, -1)) == 20)][]

或者使用dplyr:

library(dplyr)
df %>%
mutate(grp = cumsum(x == 10 & lag(x, default = 20) == 20))

您可以使用paste/paste0 将文本添加到组标签:

paste0('group_', cumsum(df$x == 10 & c(20, head(df$x, -1)) == 20))

使用的数据:

df <- data.frame(x = c(10, 3, 15, 15, 19, 19, 20, 20, 10, 10, 11, 17, 20))

关于r - 连续分类数据序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48619834/

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