如何使用tidyverse程序包获得一列中连续出现的唯一值的总数?

时间:2019-05-03 16:47:15

标签: r dplyr

我正在尝试使用tidyverse(任何合适的软件包)添加一列(通过mutate()),该列是到目前为止该列中已出现的唯一值的总和。这是一些玩具数据,显示了所需的输出。

data.frame("n"=c(1,1,1,6,7,8,8),"Unique cumsum"=c(1,1,1,2,3,4,4))

谁知道如何在tidyverse中做到这一点?

3 个答案:

答案 0 :(得分:2)

这里是group_indices

的一个选项
library(dplyr)
df1%>% 
     mutate(unique_cumsum = group_indices(., n))
#   n unique_cumsum
#1 1             1
#2 1             1
#3 1             1
#4 6             2
#5 7             3
#6 8             4
#7 8             4

数据

df1 <- data.frame("n"=c(1,1,1,6,7,8,8)) 

答案 1 :(得分:1)

这是一种方法,利用factor将为每个唯一项分配顺序值,然后用as.numeric转换基础因子代码的方法:

data.frame("n"=c(1,1,1,6,7,8,8)) %>% mutate(unique_cumsum=as.numeric(factor(n)))
  n unique_cumsum
1 1             1
2 1             1
3 1             1
4 6             2
5 7             3
6 8             4
7 8             4

答案 2 :(得分:0)

另一种解决方案:

df <- data.frame("n"=c(1,1,1,6,7,8,8))
df <- df %>% mutate(`unique cumsum` = cumsum(!duplicated(n)))

即使您的数据未排序,这也应该起作用。