R 连续地对数据序列进行分类
我是R的新手,有一个关于向表中添加新变量的问题。我有数据序列,以10开头,以20结尾,出现了好几次 有没有一种方法可以连续地对这些序列进行分组 例如: 列中的数据如下所示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
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。非常感谢!还有详细的答案:-)这正是我想要的!!