2016-01-27 61 views
1

到矢量我有一個特徵向量與重複出現的數值R:如何有條件地追加遞增後綴中的R

vec <- c('22','22','22','45','45','45','56','67','67','67','89','90') 

我要追加_1,_2,_3在矢量獲得矢量相似的價值觀像:

vec <- c('22_1','22_2','22_3','45_1','45_2','45_3','56'_1,'67_1','67_2' ... 

我的問題是我如何有條件地增加('56'是單數,不需要附加值)。我曾嘗試編寫一個循環並將列表中的出現次數存儲在列表中,但它非常冗長,我懷疑在應用系列中有更簡單的方法。

回答

2

我們可以用ave得到序列按'vec'分組,然後paste它與原始向量。

res <- paste(vec, ave(vec, vec, FUN=seq_along), sep="_") 

在情況下,我們需要更換從具有頻率1元素_1,使用table獲得頻率,子集的「表」的names其頻率爲1相匹配的元素「 res'並刪除_後跟零個或多個字符sub

tbl <- table(vec) 
names(tbl)[tbl==1] 
i1 <- vec %in% names(tbl)[tbl==1] 
res[i1] <- sub('_.*', '', res[i1]) 
res 
#[1] "22_1" "22_2" "22_3" "45_1" "45_2" "45_3" "56" "67_1" "67_2" "67_3" 
#[11] "89" "90" 

或者我們可以用make.unique

make.unique(vec, sep="_") 
#[1] "22" "22_1" "22_2" "45" "45_1" "45_2" "56" "67" "67_1" "67_2" 
#[11] "89" "90"