我正在尝试使用tidyverse(任何合适的软件包)添加一列(通过mutate()),该列是到目前为止该列中已出现的唯一值的总和。这是一些玩具数据,显示了所需的输出。
data.frame("n"=c(1,1,1,6,7,8,8),"Unique cumsum"=c(1,1,1,2,3,4,4))
谁知道如何在tidyverse中做到这一点?
答案 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)))
即使您的数据未排序,这也应该起作用。