根据特定的值序列创建子集

如何解决根据特定的值序列创建子集

我有一个这样的数据框:

df <- data.frame(x = c(0:20),y = c(50:70),m = c(0,-1,1,0))

我想创建由“m”列中的一系列值定义的子集:

一个序列应该开始结束m == -1,并且在开始和结束{{1}之间必须有一个1 }.然后每个子集包括 startend间的所有行。

例如,上述数据的子集之一如下所示:

-1

我一直在尝试很多,但我不知道该怎么做。我曾尝试使用 Subset1 <- data.frame(x = c(4:10),y = c(54:60),m = c(-1,-1)) # x y m # 1 4 54 -1 # starts with -1 # 2 5 55 0 # 3 6 56 0 # 4 7 57 1 # contains a 1 # 5 8 58 0 # 6 9 59 0 # 7 10 60 -1 # ends with -1 mapply 循环,但在设置模式时总是卡住,因为模式的两端是相同的。

例如,使用 for,我已经完成了:

mapply

当然,我总是得到

List_subsets <- mapply(function(i,j,z) df[i:j:z,drop = FALSE],SIMPLIFY = FALSE)

你知道这是否可行,你能帮我吗?我非常感谢您的意见,因为我对 R 非常陌生,这对我来说非常具有挑战性。

非常感谢!

解决方法

你可以试试这个,如果你想要的结果请告诉我:

library(stringr)
pattrn <- data.frame(str_locate_all(paste0(df$m+1,collapse=''),'0[1]*?2[1]*?0')[[1]])
## str_locate_all will find all start and end of the pattern -1,1,-1
## to find -1,-1,I have added 1 to the column,this will remove the negative sign for correct capture of location
## so,the new pattern to be found is 0,2,to do this I concatenated the m column and try to find the 0,0 with regex mentioned
pattrn_rows <- Map(seq,from=pattrn$start,to=pattrn$end)
## converting to data.frame
lapply(pattrn_rows,function(x)df[x,])
## finally subsetting,this step will give the final result into two lists of dataframes

输出:

[[1]]
    x  y  m
5   4 54 -1
6   5 55  0
7   6 56  0
8   7 57  1
9   8 58  0
10  9 59  0
11 10 60 -1

[[2]]
    x  y  m
14 13 63 -1
15 14 64  0
16 15 65  0
17 16 66  1
18 17 67  0
19 18 68  0
20 19 69 -1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?