问题一
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
新手(没写过程式,R 是我的第一次)
目前较懂得用packages做分析 但对于资料预处理还是不太熟悉
[问题叙述]:
我要怎么找出该栏的最小三个值所对应之"列样本"
[程式范例]:
#资料产生
sample1=sample(1:3,100,replace=T)
sample2=sample(1:3,100,replace=T)
sample3=sample(1:3,100,replace=T)
sample4=sample(1:3,100,replace=T)
sample5=sample(1:3,100,replace=T)
data=as.data.frame(rbind(sample1,sample2,sample3,sample4,sample5))
#转成类别型资料
for(i in 1:ncol(data)) data[,i]=as.factor(data[,i])
#计算样本与样本间相似程度,m表示距离矩阵,数值越小表示越相似
n=nrow(data)
m=matrix(nrow=n,ncol=n)
for(i in seq_len(n - 1))
for(j in seq(i, n))
m[j, i]=m[i, j]=sum(data[i,] != data[j,])
#m的输出会长这样,其中col1代表sample1,以此类推
col1 col2 col3 col4 col5
1 0 25 65 56 24
2 58 0 45 23 84
3 65 73 0 77 36
4 21 53 43 0 71
5 25 36 68 74 NA
问题:我要找col1中最小的两个值之样本,也就是4和5,有什么语法可供参考吗?
因为如果用which.min(data[,1])的话,只会得到4
问题二
[问题类型]:
*[1;30;40m
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
*[m
[软件熟悉度]:
*[1;30;40m请把以下不需要的部份删除
新手(没写过程式,R 是我的第一次)*[m
[问题叙述]:
*[1;30;40m请简略描述你所要做的事情,或是这个程式的目的*[m
现有三个样本,每个样本有100个变量,所以维度是3*100
我想依序比对这三个样本之变量来产生第四个样本(图示a)
在产生的过程中 该变量以多数决的方式产生第四个样本之变量(图示b)
若遇到无法以多数决的方式产生之情况(图示c)
就截至比对目前结果为止,找出三个样本哪个与第四个样本最接近
并根据此样本的值去产生该变量(说明d)
a.
V1 V2 V3 V4 V5 V6 V7 ... ... V100
sample1 1 3 2 3 1 3 2 ... ... 1
sample2 3 2 1 3 2 1 3 ... ... 1
sample3 1 3 2 3 1 3 1 ... ... 2
sample4 1 3 2 3 1 3 2 ... ... 1
b.(以V1为例)
V1 V2 V3 V4 V5 V6 V7 ... ... V100
sample1 "1" 3 2 3 1 3 2 ... ... 1
sample2 3 2 1 3 2 1 3 ... ... 1
sample3 "1" 3 2 3 1 3 1 ... ... 2
sample4 1 3 2 3 1 3 2 ... ... 1
c.(以V7为例)
V1 V2 V3 V4 V5 V6 V7 ... ... V100
sample1 1 3 2 3 1 3 "2" ... ... 1
sample2 3 2 1 3 2 1 "3" ... ... 1
sample3 1 3 2 3 1 3 "1" ... ... 2
sample4 1 3 2 3 1 3 2 ... ... 1
d.
因为到V7卡住,所以先对Sample1到Sample4(V1~V6)算一次相似程度
计算的方式与问题一相同,所以比对程序截至到V6,此时的距离矩阵为
col1 col2 col3 col4
1 0 5 0 0
2 5 0 5 5
3 0 5 0 0
4 0 5 0 NA
(情况1)从结果可知 第四个样本(col4)与第一与第三个样本较相似
此时可根据第一与第三个样本的V7,第四个样本的V7可任意填入2或1
(情况2)
col1 col2 col3 col4
1 0 5 0 0
2 5 0 5 5
3 0 5 0 "1"
4 0 5 0 NA
如果今天算出来的距离矩阵是这样 就可以很确定第四个样本的V7要填入2
[程式范例]:
sample1=sample(1:3,100,replace=T)
sample2=sample(1:3,100,replace=T)
sample3=sample(1:3,100,replace=T)
data=as.data.frame(rbind(sample1,sample2,sample3))
接下来就请各位前辈多多提点一下了~感谢帮忙