2014-09-25 40 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

相關問題