首先,我是R的新手,所以我并不完全熟悉该语言的语法 - 我有一个数据列表,例如我们可以说它看起来像这样:
1,1,1,1,1,2,2,2,3,3,3,2,2,3,3,3,4,4,4,4,4,4,4,4 ,4,5,5,5,5,6,6,5,6,5,7,7,7,7
我想要做的是创建一个新列表,每组相同数据只有一个条目,所以:
1,2,3,2,3,4,5,6,5,6,5,7(约)。
我不太清楚如何解决这个问题。请注意,值可能不是整数。此外,如果任何人有任何想法与字符串或时间戳做同样的事情,建议将不胜感激! 到目前为止,我在索引方面试图解决这个问题,但我无法将其降级。
答案 0 :(得分:4)
看起来你需要功能rle。如果x是你的值向量,那么rle(x)$ values将给你想要的。
values <- c(1,1,1,1,1,2,2,2,3,3,3,2,2,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,5,6,5,7,7,7,7)
rle(values)$values
## [1] 1 2 3 2 3 4 5 6 5 6 5 7
values <- as.character(values)
rle(values)$values
## [1] "1" "2" "3" "2" "3" "4" "5" "6" "5" "6" "5" "7"
ts <- Sys.time()
stamps <- sort(rep(c(ts, ts+1, ts+2, ts+3), 5))
## [1] "2014-09-25 10:55:29 EDT" "2014-09-25 10:55:29 EDT" "2014-09-25 10:55:29 EDT"
## [4] "2014-09-25 10:55:29 EDT" "2014-09-25 10:55:29 EDT" "2014-09-25 10:55:30 EDT"
## [7] "2014-09-25 10:55:30 EDT" "2014-09-25 10:55:30 EDT" "2014-09-25 10:55:30 EDT"
## [10] "2014-09-25 10:55:30 EDT" "2014-09-25 10:55:31 EDT" "2014-09-25 10:55:31 EDT"
## [13] "2014-09-25 10:55:31 EDT" "2014-09-25 10:55:31 EDT" "2014-09-25 10:55:31 EDT"
## [16] "2014-09-25 10:55:32 EDT" "2014-09-25 10:55:32 EDT" "2014-09-25 10:55:32 EDT"
## [19] "2014-09-25 10:55:32 EDT" "2014-09-25 10:55:32 EDT"
as.POSIXct(rle(as.numeric(stamps))$values, origin = '1970-01-01')
## [1] "2014-09-25 10:55:29 EDT" "2014-09-25 10:55:30 EDT" "2014-09-25 10:55:31 EDT"
## [4] "2014-09-25 10:55:32 EDT"