2016-02-16 29 views
-1

我需要編寫一個R程序,該程序在給定向量的情況下將返回另一個向量,該向量將輸入向量中每個位置的元素數量提供給出現次數在指定值的輸入向量中。例如,如果指定的值是0,然後用:提前:)如何獲得r中的計數,直到滿足特定值並繼續

input : x<-c(1,1,0,1,1,1,0) 

desired output<- (2,1,0,3,2,1,0) 

感謝

+0

會發生什麼情況指定的值沒有出現在特定位置的右側?或者我們是否假設指定的值始終顯示爲最後一個元素? – peak

+0

不是。我需要計數值直到滿足零。最後一個元素不一定總是爲零。在上面的例子中,第一個元素有2個要傳遞的其他元素(包括1st)到達零。第二個元素剩下1個位置。當達到零點時,第4個元素有3個位置以滿足下一個零點。等謝謝:) – nicky

回答

1

我們可以嘗試

library(data.table) 
ave(x, rleid(x), FUN= function(x) rev(seq_along(x)))*x 
#[1] 2 1 0 3 2 1 0 

我們也可以使用rlebase R

rl <- inverse.rle(within.list(rle(x), values <- seq_along(values))) 
ave(x, rl, FUN=function(x) rev(seq_along(x)))*x 
#[1] 2 1 0 3 2 1 0 
+0

非常感謝。但是,我得到以下錯誤「交互錯誤(...):無法找到函數」rleid「」當我嘗試這個。 – nicky

+0

@nicky它在'data.table'中。如果你沒有安裝data.table,你可能需要安裝'data.table',然後加載'library(data.table)' – akrun

+0

@nicky更新了基本的R選項。 – akrun

相關問題