如果我有一个观测值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
谢谢!
答案 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'转换为逻辑向量,以便我们自动获得频率(通过sum
)xtabs
。
xtabs(as.logical(Y)~factor(X, levels=Y))