根据输入向量创建频率向量

时间:2017-11-05 00:50:51

标签: r

我在结构中有一个变量测试:

> test <- c(9,87)
> names(test) <- c("VGP", "GGW")
> dput(test)
structure(c(9, 87), .Names = c("VGP", "GGW"))
> class(test)
[1] "numeric"

这是输入向量的一个非常简化的版本,但是我希望输出为长度为100的向量,其中包含每个数字1-100的频率。实际输入向量的长度约为1000000,所以我正在寻找一种适用于任意长度矢量的方法,假设只有1-100个数字。

在这个例子中,除9和87之外的所有位置的数字将显示为0,第9和第87位数字都将显示为50.

如何生成此输出?

3 个答案:

答案 0 :(得分:3)

如果我们要查找的比例包含vector以外的值并将这些值设为0,请将vector转换为factor levels }指定,然后执行tableprop.table

100*prop.table(table(factor(test, levels = 1:100)))

答案 1 :(得分:1)

>freq<-vector(mode="numeric",length=100)
>for(i in X)
+{ if(i>=1 && i<=100)
+  freq[i]=freq[i]+1
+}
>freq

X是包含10000个元素的向量 添加if条件可以确保值在[1,100]范围内。

希望这有帮助。

答案 2 :(得分:0)

如果您有一个数字向量并且只想获取值的频率表,请使用表函数。

set.seed(1234)
d <- sample(1:10, 1000, replace = TRUE)
x <- table(d)
x
#  1   2   3   4   5   6   7   8   9  10   
# 92  98 101 104  87 112 104  94  88 120 

如果有可能缺少值,在我的例子中说11是可能的,那么我会做以下事情:

y <- rep(0, 11)
names(y) <- as.character(1:11)
y[as.numeric(names(x))] <- x
y
# 1   2   3   4   5   6   7   8   9  10  11 
 92  98 101 104  87 112 104  94  88 120   0