3

我有几列的数据框我需要重新组合 col2 的序列,以便在标签从 a 更改为 b 或 b 到 a 后,它们使用新标签进行分组,您可以在 Desired 列中看到结果

testdf <- data.frame(mydate = seq(as.Date('2012-01-01'), 
                                  as.Date('2012-01-10'), by = 'day'),
                     col1 = 1:10,
                     col2 = c("a","a","b","b","a","b","a","b","a","a"),
                     Desired= c(1,1,2,2,3,4,5,6,7,7))

       mydate col1 col2 所需
1 2012-01-01 1 一 1
2 2012-01-02 2 一 1
3 2012-01-03 3 b 2
4 2012-01-04 4 b 2
5 2012-01-05 5 一 3
6 2012-01-06 6 b 4
7 2012-01-07 7 一 5
8 2012-01-08 8 b 6
9 2012-01-09 9 一 7
10 2012-01-10 10 一 7
有什么方法可以在没有 FOR 循环的情况下解决这个问题。因为数据集有超过 100 万行。

4

2 回答 2

1

你可以试试这个:

output <- c(0,cumsum(diff(as.numeric(testdf$col2))!=0))+1
#> output
#[1] 1 1 2 2 3 4 5 6 7 7
于 2015-07-09T16:36:33.573 回答
1

这是一种更流行的方式。

testdf %>% group_by(col2) %>% mutate(first = cumsum(as.numeric(col2))
于 2015-07-09T16:43:30.410 回答