【发布时间】:2015-09-28 03:24:33
【问题描述】:
我有几列的数据框,我需要重新组合 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 万行。
【问题讨论】:
-
我认为这是一个重复的问题,但这是一种方法:
r <- rle(as.character(testdf$col2)); r$values <- seq_along(r$values); inverse.rle(r)data.table包中的rleid还有一个不错的功能。 -
一般建议:有这么多记录,您应该考虑使用数据表而不是数据帧(为了代码优雅和计算效率),see this
-
正如@Frank 所说,
library(data.table) ; rleid(testdf$col2)应该这样做(使用开发版)
标签: r aggregate lapply labeling