Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 连续地对数据序列进行分类_R - Fatal编程技术网

R 连续地对数据序列进行分类

R 连续地对数据序列进行分类,r,R,我是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

我是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
...
我想有一个这样的输出

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
...
有可能编写这样的程序吗


非常感谢你的帮助

试试这个。x是你的数字,y是你的分组

x<-0:20
y<-NA
df1<-data.frame(x,y)
group1<-(x>10)
group2<-(x<=10)
df1$y[group1]<-"Group1"
df1$y[group2]<-"Group2"
df1

x使用base R,您可以检测序列并使用
cumsum
head
创建分组变量:

df$grp <- cumsum(df$x == 10 & c(20, head(df$x, -1)) == 20)
它的作用是:

  • df$x==10
    检测
    10
  • c(20,头部(df$x,-1))==20
    检测上一个值是否等于
    20
    ,第一个值设置为
    20
    ,因为
    df$x的第一个值前面有一个值
  • 通过将这两个值与
    &
    组合,可以得到一个逻辑值,该值指示
    df$
    中的哪些值等于
    10
    ,并且前面的值也等于
    20
  • 将其包装在
    cumsum
    中可以得到一个分组值
或使用
数据。表

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))

df为您的专栏尝试类似的内容
cut(1:100,breaks=seq(01000,by=10))
谢谢您的回答。但是第一种方法没有帮助,因为我想要第3组、第4组等等,我看不出与另一篇文章的关系:-(这没有给出正确的输出,请尝试将其应用到提供的向量OP。非常感谢!还有详细的答案:-)这正是我想要的!!