2016-02-27 36 views
1

如果我有一個觀測值X和一個參考值Y的向量的向量,我該如何使用R來查找X中每個Y值的頻率?查找不同向量中一個向量的唯一值的頻率

# create X and Y 
X = c(1,2,4,5,1,4) 
Y = 1:6 

# desired output 
Y X 
1 2 
2 1 
3 0 
4 2 
5 1 
6 0 

我知道如何找到X,或者是X什麼值的Y值的頻率,但這證明(emrbarrinsgly)困難。我很抱歉如果之前已經問過這個問題,但我正在努力尋找類似的問題。

我已經試過

# 'count' in the "plyr" package 
count(X , "unique(Y)") 

...但是這將返回:

unique.Y. freq 
1   1 
2   1 
3   1 
4   1 
5   1 
6   1 

謝謝!

回答

3

我們轉換的「X」來factor類指定levels爲「Y」的unique元素(在這種情況下,只有6個獨特的元素。但是,如果有重複的元素,使用, levels= unique(Y))。獲取'Y'的頻率並轉換'X'並執行colSums

colSums(table(Y,factor(X, levels=Y))) 
# 1 2 3 4 5 6 
# 2 1 0 2 1 0 

或者像@docendodiscmus提到的,我們可以應用在table轉化的 'X' 來獲得輸出(使用本示例)

table(factor(X, levels = Y)) 

或者使用xtabs。默認情況下,它給出sum重複的元素。在這裏,我們將'Y'轉換爲邏輯矢量,以便我們自動獲得xtabs的頻率(通過執行sum)。

xtabs(as.logical(Y)~factor(X, levels=Y)) 
+1

謝謝!這工作。 – user3237820

+0

不確定你爲什麼需要'colSums'? 'table(factor(X,levels = Y))'是否不起作用? –

+0

@docendodiscimus是的,它應該工作。但是,我認爲它可能在一個大型矢量中有一個問題。 – akrun

相關問題