我正在处理的数据涉及30个人对60个案例的观察。我有4个类别的百分比列表作为我的起点。目标是向后工作并重新创建原始数据。
例如,案例33被30个观察者的13%,64%,23%和0%分类为' 1'' 2',' 3&# 39;和' 4'分别。
[1] [2] [3] [4]
[33,] 13 64 23 0
[34,] 6 84 10 0
[35,] 7 55 38 0
[36,] 6 37 57 0
[37,] 44 34 21 0
[38,] 9 13 54 24
订单并不重要;事实上,随机观察者最好将案例33分类为' 1'' 2'重要的是,如上所述,它们应该大致相当于百分比。
我编写了一个可以为单个实例执行此操作的函数(请忽略可怕的质量):
makeobs<-function (d){
ncases<-round((d/100)*30)
u<-1:30;u1<-1:30
n1<-sample(u1, ncases[1]);u2<-u1[!u1 %in% n1]
n2<-sample(u2, ncases[2]);u3<-u2[!u2 %in% n2]
n3<-sample(u3, ncases[3]);u4<-u3[!u3 %in% n3]
n4<-u4;
u[n1]<-1;u[n2]<-2;u[n3]<-3;u[n4]<-4
u
}
如果d
为c(12, 64, 23, 0)
,则makeobs
会返回以下结果:
> d<-c(13, 64, 23, 0)
> makeobs(d)
[1] 1 2 1 2 3 3 2 2 2 3 2 2 2 2 2 2 3 1 2 2 2 2 1 2 3 3 2 2 3 2
> table(makeobs(d))
1 2 3
4 19 7
显然,该功能似乎适用于百分比向量。但是当我在60个案例的矩阵上使用apply
时,它并没有。
这是错误消息:
sample.int中的错误(长度(x),大小,替换,概率)不能采取 当“替换= FALSE&#39;
时,样本大于人口
我做错了什么?我希望能够最终解决这个问题,并了解我为什么错。任何帮助表示赞赏!