2015-02-23 104 views
-2

假設在R我們有三列。第一個是1:4的替換隨機樣本。第二個是根據需要重複1:4。第三隻是一個索引。結果應該輸出一個粘貼的數字組合,其順序無關緊要並給出一個計數。請注意,n沒有填寫在sample中,但應該能夠爲所有n工作。例如,作爲中指出:排列和分組在R

c1 <- sample(1:4, n, replace = TRUE) 
c2 <- c(4:1) 
c3 <- 1 

cbind(c1, c2, c3) 

我們希望我們的結果看起來像這樣的事情:

11 x0 
12 x1 
13 x2 
14 x3 
22 x4 
23 x5 
24 x6 
33 x7 
34 x8 
44 x9 

顯示x[0:9] != 0

謝謝您的幫助!祝你好運!

+0

謝謝Henrik的編輯。 – Jcrist 2015-02-24 00:45:03

回答

0

我相信我們已經解決了我們自己的問題。原始問題涉及的是來源和目的地,而不是數值。所以,我發佈了這個答案 - 這是一個輕鬆切換到數字。希望這有助於未來的人。

library(dplyr) 
library(sqldf) 
x<-data.frame(orig=as.character(sample(LETTERS[1:10], 100, replace=TRUE)), dest=as.character(sample(LETTERS[1:10], 100, replace=TRUE))) 
x$orig<-as.character(x$orig) 
x$dest<-as.character(x$dest) 

x1<-sort(unique(c(x[,1], x[,2]))) 

x_ind<-data.frame(loc=x1, ind=1:length(x1)) 

xx<-sqldf("select a.*, b.ind as orig_ind from x as a left join x_ind as b on a.orig=b.loc") 
xxx<-sqldf("select a.*, b.ind as dest_ind from xx as a left join x_ind as b on a.dest=b.loc") 

comb<-function(orig, dest, orig_ind, dest_ind) 
    { 
    if (orig_ind<=dest_ind) 
    { 
    out<-paste(orig, dest, sep="-") 
    } else 
    { 
    out<-paste(dest, orig, sep="-") 
    } 
    return(out) 
} 

orig_dest<-apply(xxx, 1, function(x) comb(x[1], x[2], x[3], x[4])) 
xxxx<-data.frame(xxx, orig_dest)