R 移除i+;第1学期(如果再次发生)
假设我们有以下数据R 移除i+;第1学期(如果再次发生),r,for-loop,R,For Loop,假设我们有以下数据 A <- c(1,2,2,2,3,4,8,6,6,1,2,3,4) B <- c(1,2,3,4,5,1,2,3,4,5,1,2,3) data <- data.frame(A,B) 我最好的猜测是使用for语句,但是我在这方面没有经验,你可以试试 data[c(TRUE, data[-1,1]!= data[-nrow(data), 1]),] 另一个选项,dplyr-esque: library(dplyr) dat1 <- data.f
A <- c(1,2,2,2,3,4,8,6,6,1,2,3,4)
B <- c(1,2,3,4,5,1,2,3,4,5,1,2,3)
data <- data.frame(A,B)
我最好的猜测是使用for语句,但是我在这方面没有经验,你可以试试
data[c(TRUE, data[-1,1]!= data[-nrow(data), 1]),]
另一个选项,
dplyr
-esque:
library(dplyr)
dat1 <- data.frame(A=c(1,2,2,2,3,4,8,6,6,1,2,3,4),
B=c(1,2,3,4,5,1,2,3,4,5,1,2,3))
dat1 %>% filter(A != lag(A, default=FALSE))
## A B
## 1 1 1
## 2 2 2
## 3 3 5
## 4 4 1
## 5 8 2
## 6 6 3
## 7 1 5
## 8 2 1
## 9 3 2
## 10 4 3
库(dplyr)
dat1%过滤器(A!=滞后(A,默认值=假))
##A B
## 1 1 1
## 2 2 2
## 3 3 5
## 4 4 1
## 5 8 2
## 6 6 3
## 7 1 5
## 8 2 1
## 9 3 2
## 10 4 3
使用diff,它计算滞后为1的成对差异:
data[c( TRUE, diff(data[,1]) != 0), ]
输出:
A B
1 1 1
2 2 2
5 3 5
6 4 1
7 8 2
8 6 3
10 1 5
11 2 1
12 3 2
13 4 3
使用rle
A <- c(1,2,2,2,3,4,8,6,6,1,2,3,4)
B <- c(1,2,3,4,5,1,2,3,4,5,1,2,3)
data <- data.frame(A,B)
X <- rle(data$A)
Y <- cumsum(c(1, X$lengths[-length(X$lengths)]))
View(data[Y, ])
row.names A B
1 1 1 1
2 2 2 2
3 5 3 5
4 6 4 1
5 7 8 2
6 8 6 3
7 10 1 5
8 11 2 1
9 12 3 2
10 13 4 3
A我通常更喜欢base
解决方案,而不是非标准的包解决方案(例如使用dplyr
),所以我想我应该使用这个<代码>dat1[c(TRUE,diff(dat1[,1])!=0),]
。除了可读性差异的微弱暗示外,这个diff
版本的速度慢了25%。。。再说一遍,“过早优化是万恶之源”,不是吗?(简单的解决方案,很好。)@r2evans是的,diff
很慢。我测试了好几次,发现与其他解决方案相比没有那么快,因此数据中的1[-nrow(data),1]概括了行number@lukeg它建议列号,即1st column
是的,当然,您是如何在评论中设置第一列的格式的?注释框中的shift+k不起作用感谢您提出了另一种解决方案我希望我已经想到了;-)我看到你的评论后,我已经张贴。。。现在我觉得自己有点傻,因为上面写着:D,当我想到这个想法时,我觉得自己很聪明,不过现在不那么聪明了:我在笑,不用担心。。。这通常是一场争取在别人之前得到答案/评论的斗争,我已经这样做过好几次了。这是一个很好的解决方案,恰好被@akrun的解决方案所取代。是的,这是我讨厌的部分,导致快速发布内容并编辑5次。。。只是为了快点。。。或者最坏的情况是:看到:当你输入你的答案时,有一个答案。。。。但它谈到了社区的活动,这是非常活跃的
A <- c(1,2,2,2,3,4,8,6,6,1,2,3,4)
B <- c(1,2,3,4,5,1,2,3,4,5,1,2,3)
data <- data.frame(A,B)
X <- rle(data$A)
Y <- cumsum(c(1, X$lengths[-length(X$lengths)]))
View(data[Y, ])
row.names A B
1 1 1 1
2 2 2 2
3 5 3 5
4 6 4 1
5 7 8 2
6 8 6 3
7 10 1 5
8 11 2 1
9 12 3 2
10 13 4 3