2014-09-25 21 views
0

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

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

+0

如果你给你的实际数据集是什么样子的例子它将帮助(请参阅如何使[重复的例子(http://stackoverflow.com/a/5963610/2461552))。如果您有一个唯一代表每个组的变量以及您显示的向量,则应该可以轻松地使用“重复”按组删除重复项。 – aosmith 2014-09-25 14:49:47

+0

所以每个变量都是唯一的,但不是每个组。所以所有的样本数据点都是相同的变量。此外,我不知道使用重复,因为我可能以后的测量值等于先前的测量值,但也是不同的样本。这意味着特定的值必须包含在新列表中。 – James 2014-09-25 14:54:54

+0

请用精确的术语。我发现你的数据不太可能在列表中。这很可能是一个矢量。另外,'〜='是什么样的运算符?它不是R语言的一部分,也不是“跳过”。 – Roland 2014-09-25 14:57:37

回答

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" 
+0

嘿,这很漂亮!这是我最初寻找的内容,我将调整编辑的原始帖子,详细说明我正在尝试做什么。谢谢 – James 2014-09-25 14:59:31

+1

@詹姆斯,请小心,以免您的问题成为移动目标。 – Henrik 2014-09-25 15:09:26

相关问题