提问人:user18894435 提问时间:3/10/2023 更新时间:3/10/2023 访问量:38
根据 NA 的出现次数创建分组变量
Create grouping variable based on the occurrences of NAs
问:
我有一个包含列的数据帧:df
x
df <- data.frame(x = c(1, 1, NA, 1, 1, NA, NA, 1, 1))
这些只是占位符,用于表示任何不缺失的数值。我想创建另一个能够分组的列。1
y
df
x y
1 1 1
2 1 1
3 NA 2
4 1 2
5 1 2
6 NA 3
7 NA 3
8 1 3
9 1 3
逻辑是,当遇到 a 时,将 1 加到前一个 .但是,如果 是串联的,则逻辑仅适用于第一次出现,因此 since 第 6 行的值相同。NA
y
NA
y
答:
2赞
Onyambu
3/10/2023
#1
在比较当前和之前之后,您可以通过调用以下命令来使用:cumsum
lag
df %>%
mutate(grp = cumsum(is.na(x) & !is.na(lag(x))) + 1)
x grp
1 1 1
2 1 1
3 NA 2
4 1 2
5 1 2
6 NA 3
7 NA 3
8 1 3
9 1 3
0赞
TarJae
3/10/2023
#2
这是一个使用diff
cumsum()
library(dplyr)
df %>%
mutate(grp = cumsum(c(0, diff(!is.na(x))) != 0 & !is.na(x))+1)
x grp
1 1 1
2 1 1
3 NA 1
4 1 2
5 1 2
6 NA 2
7 NA 2
8 1 3
9 1 3
0赞
Onyambu
3/10/2023
#3
df %>%
mutate(grp = dense_rank(x * consecutive_id(x)))%>%
fill(grp, .direction = 'up')
x grp
1 1 1
2 1 1
3 NA 2
4 1 2
5 1 2
6 NA 3
7 NA 3
8 NA 3
9 1 3
评论
0赞
user18894435
3/10/2023
这种方法可能对我不起作用,因为我说过这些 1 可以是任何不缺失的数值。但你的第一个答案非常有效。谢谢!
评论