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