Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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_Select_Dataframe_Extract_Rows - Fatal编程技术网

R 如果只有一个特殊列中的行的实际值和后续值不相同,则从数据中提取行

R 如果只有一个特殊列中的行的实际值和后续值不相同,则从数据中提取行,r,select,dataframe,extract,rows,R,Select,Dataframe,Extract,Rows,我在使用R时遇到以下问题: 我有一个带有运行时间戳的数据,所以有很多行。 如果方向发生变化,则应将变化前后的整行提取到新表中 例如: 我所拥有的: 时间戳方向… 00:01前… 00:02前… 00:03前… 00:04前… 00:05侧面… 00:06侧面… 00:07侧面… 00:08侧面… 00:09侧面… 00:10前… 00:11前… 00:12前… 00:13前… 00:14回来… 00:15回来… 00:16回来… 00:17回来… 00:18回来… 00:19回来 我想要一张新桌

我在使用R时遇到以下问题: 我有一个带有运行时间戳的数据,所以有很多行。 如果方向发生变化,则应将变化前后的整行提取到新表中

例如: 我所拥有的:

时间戳方向… 00:01前… 00:02前… 00:03前… 00:04前… 00:05侧面… 00:06侧面… 00:07侧面… 00:08侧面… 00:09侧面… 00:10前… 00:11前… 00:12前… 00:13前… 00:14回来… 00:15回来… 00:16回来… 00:17回来… 00:18回来… 00:19回来

我想要一张新桌子:

时间戳方向… 00:04前… 00:05侧面… 00:09侧面… 00:10前… 00:13前… 00:14回来

谁能帮我?我真的不知道从哪里开始。 我使用datadplyr::lag和dplyr::lead导入数据对于访问向量中的前面和后面的元素很有用。下面是一个使用这些工具以及中的其他数据争用工具的解决方案,如果您不熟悉该软件包,请参阅,例如,了解介绍;有关详细信息,请参见注释

图书馆弹琴 新的% 查找方向与上一行方向不同的行 变异..改变=方向!=滞后方向%>% 保留方向更改的行,以及每次更改前的行 筛选器..更改| lead..更改%>% 从数据中删除更改指示器 选择-…更改 刚出现的 >时间戳方向 >1 00:04前 >2 00:05侧面 >3 00:09侧面 >4点10分前 >5:00:13前 >6点14分回来 都是新的,想要吗 >[1]是的 编辑:您还可以通过使用类似于@storaged优雅答案的方法删除mutate和select:

新的% 过滤器方向!=方向|方向!=领导方向 注:关于上述内容,我阅读了您提供的如下数据片段:

opdplyr看起来很酷,但我也建议一些基于逻辑运算的简单方法:

假设第二列包含方向,即数据[,2] 我会:

x <- data[,2]
y <- c(x[1], x[1:(length(x)-1)])
z <- c(x[2:length(x)], x[1])

谢谢你们两位的支持! 不幸的是,我在安装和使用软件包时遇到了一些问题,所以我无法尝试@MikkoMarttilas解决方案。仅仅使用@storaged代码,我也没有得到我所需要的,但我将这个想法与我的答案中的想法结合起来,所以这对我来说是有效的:

data <- read.table()
dat7 <- data[,7]
num.dat7 <- c(dat7[1], dat7[1:(length(dat7))])
w <- which(diff(num.dat7)!=0)
w1 <- w-1
after <- data.frame(data[w,])
before <- data.frame(data[w1,])
bind <- rbind(before, after)
我们可以使用rleid对具有相同方向值的连续条纹进行分组,并拾取每个条纹的第一个和最后一个值,而不是使用滞后和超前来识别方向的变化:

library(data.table)
setDT(df)[df[, .I[c(1L, .N)], by = rleid(direction)]$V1][-c(1L, .N)]
最后,根据OP的请求,从结果中删除第一条条纹的第一行和最后一条条纹的最后一行


如果您提供一份支持您的问题的报告,我们更有可能帮助您。我们可以利用它来向您展示如何回答您的问题。我还建议大家看一下。一般来说,证明你已经付出了一些努力也是很好的。
data <- read.table()
dat7 <- data[,7]
num.dat7 <- c(dat7[1], dat7[1:(length(dat7))])
w <- which(diff(num.dat7)!=0)
w1 <- w-1
after <- data.frame(data[w,])
before <- data.frame(data[w1,])
bind <- rbind(before, after)
library(data.table)
setDT(df)[df[, .I[c(1L, .N)], by = rleid(direction)]$V1][-c(1L, .N)]
   Timestamp direction
1:     00:04     front
2:     00:05      side
3:     00:09      side
4:     00:10     front
5:     00:13     front
6:     00:14      back