在不同的向量中查找一个向量的唯一值的频率

时间:2016-02-27 12:00:02

标签: r count

如果我有一个观测值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的值的频率,或者Y的值在X中,但这证明(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

谢谢!

1 个答案:

答案 0 :(得分: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所提到的,我们可以在转换后的'X'上应用table来获取输出(使用此示例)

table(factor(X, levels = Y))

或使用xtabs。默认情况下,它会提供重复元素的sum。在这里,我们将'Y'转换为逻辑向量,以便我们自动获得频率(通过sumxtabs

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