使用dplyr在列中的值更改时提取行
每次b中有变化时,我都试图提取行:使用dplyr在列中的值更改时提取行,r,dataframe,dplyr,row,extract,R,Dataframe,Dplyr,Row,Extract,每次b中有变化时,我都试图提取行: a b 1 1 A 2 4 A 3 5 A 4 3 B 5 3 B 6 2 B 7 4 B 8 6 A 9 2 A 10 4 C 11 1 C 所以我期望的结果是: a b 1 1 A 2 3 B 3 6 A 4 4 C 我曾想过使用dplyr中的lag函数来提取之前的b值不同但无法实现的行 任何帮助都将非常感激 一个选项可以是: df %>% group_by(rleid = with(rle(b), rep(seq_
a b
1 1 A
2 4 A
3 5 A
4 3 B
5 3 B
6 2 B
7 4 B
8 6 A
9 2 A
10 4 C
11 1 C
所以我期望的结果是:
a b
1 1 A
2 3 B
3 6 A
4 4 C
我曾想过使用dplyr中的lag函数来提取之前的b值不同但无法实现的行
任何帮助都将非常感激 一个选项可以是:
df %>%
group_by(rleid = with(rle(b), rep(seq_along(lengths), lengths))) %>%
slice(1)
a b rleid
<int> <chr> <int>
1 1 A 1
2 3 B 2
3 6 A 3
4 4 C 4
df%>%
分组依据(rleid=具有(rle(b),代表(沿(长度)的顺序),长度))%>%
切片(1)
一个b字
1 A 1
2 3 B 2
3 6 A 3
4 C 4
如果您确实想使用lag
并比较各组的差异,那么您可以执行以下操作:
df %>%
group_by(grp = cumsum(b != lag(b, default = first(b)))) %>%
slice(1)
在这种情况下,在计算第一行时,您可以将默认值设置为
first(b)
,以获得零差异。一个带有数据的选项。table
library(data.table)
setDT(df)[rowid(rleid(b)) == 1]
# a b
#1: 1 A
#2: 3 B
#3: 6 A
#4: 4 C
数据
df
df <- structure(list(a = c(1L, 4L, 5L, 3L, 3L, 2L, 4L, 6L, 2L, 4L,
1L), b = c("A", "A", "A", "B", "B", "B", "B", "A", "A", "C",
"C")), class = "data.frame", row.names = c("1", "2", "3", "4",
"5", "6", "7", "8", "9", "10", "11"))