R如何从一组相同的数据点中获取一个数据点

时间:2014-09-25 14:39:14

标签: r

首先,我是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(约)。

我不太清楚如何解决这个问题。请注意,值可能不是整数。此外,如果任何人有任何想法与字符串或时间戳做同样的事情,建议将不胜感激! 到目前为止,我在索引方面试图解决这个问题,但我无法将其降级。

1 个答案:

答案 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"