[問題] 依序比對變數產生新資料
問題一
[問題類型]:
程式諮詢(我想用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))
接下來就請各位前輩多多提點一下了~感謝幫忙
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.184.161.128
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1438527811.A.57F.html
※ 編輯: sinclairJ (111.184.161.128), 08/02/2015 23:06:27
→
08/02 23:23, , 1F
08/02 23:23, 1F
→
08/02 23:25, , 2F
08/02 23:25, 2F
→
08/02 23:26, , 3F
08/02 23:26, 3F
→
08/02 23:27, , 4F
08/02 23:27, 4F
→
08/02 23:28, , 5F
08/02 23:28, 5F
→
08/02 23:30, , 6F
08/02 23:30, 6F
→
08/02 23:30, , 7F
08/02 23:30, 7F
→
08/02 23:31, , 8F
08/02 23:31, 8F
→
08/02 23:36, , 9F
08/02 23:36, 9F
→
08/02 23:41, , 10F
08/02 23:41, 10F
→
08/02 23:42, , 11F
08/02 23:42, 11F
→
08/02 23:53, , 12F
08/02 23:53, 12F
→
08/02 23:53, , 13F
08/02 23:53, 13F
→
08/02 23:54, , 14F
08/02 23:54, 14F
→
08/02 23:54, , 15F
08/02 23:54, 15F
→
08/02 23:55, , 16F
08/02 23:55, 16F
→
08/02 23:59, , 17F
08/02 23:59, 17F
→
08/03 00:00, , 18F
08/03 00:00, 18F
→
08/03 00:00, , 19F
08/03 00:00, 19F
→
08/03 00:06, , 20F
08/03 00:06, 20F
→
08/03 00:07, , 21F
08/03 00:07, 21F
→
08/03 00:08, , 22F
08/03 00:08, 22F
→
08/03 00:15, , 23F
08/03 00:15, 23F
→
08/03 00:19, , 24F
08/03 00:19, 24F
→
08/03 00:19, , 25F
08/03 00:19, 25F
→
08/03 00:20, , 26F
08/03 00:20, 26F
→
08/03 00:20, , 27F
08/03 00:20, 27F
→
08/03 00:20, , 28F
08/03 00:20, 28F
→
08/03 00:21, , 29F
08/03 00:21, 29F
→
08/03 00:23, , 30F
08/03 00:23, 30F
→
08/03 20:57, , 31F
08/03 20:57, 31F

→
08/03 20:58, , 32F
08/03 20:58, 32F
→
08/03 20:59, , 33F
08/03 20:59, 33F
→
08/03 20:59, , 34F
08/03 20:59, 34F
→
08/03 21:20, , 35F
08/03 21:20, 35F
→
08/03 21:42, , 36F
08/03 21:42, 36F
→
08/03 21:42, , 37F
08/03 21:42, 37F
→
08/03 21:45, , 38F
08/03 21:45, 38F
→
08/03 21:46, , 39F
08/03 21:46, 39F
→
08/04 01:32, , 40F
08/04 01:32, 40F
→
08/04 01:32, , 41F
08/04 01:32, 41F
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章