我在结构中有一个变量测试:
> 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.
如何生成此输出?
答案 0 :(得分:3)
如果我们要查找的比例包含vector
以外的值并将这些值设为0,请将vector
转换为factor
levels
}指定,然后执行table
和prop.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