2016-02-27 66 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

相关问题