2014-03-28 160 views
-1

我想將各個矢量值(每個當前保存爲矩陣中的一行)合併到單個單元格中,值之間用逗號分隔。將多個單元格合併爲一個單元格R

我現在的代碼創建隨機向量。

例如,

## Group 1 
N <- 10 

set.seed(06510) 

grp1 <- t(replicate(N, sample(seq(1:4), 4, replace = FALSE))) 

結果看起來像

表1:

 [,1] [,2] [,3] [,4] 
[1,] 2 4 3 1 
[2,] 4 2 1 3 
[3,] 2 4 1 3 
[4,] 1 4 3 2 
[5,] 1 3 2 4 
[6,] 2 1 3 4 
[7,] 4 3 2 1 
[8,] 4 1 3 2 
[9,] 2 4 3 1 
[10,] 1 4 2 3 

但我想要的結果看起來像:

表2:

 [,1] 
[1,] 2,4,3,1 
[2,] 4,2,1,3 
[3,] 2,4,1,3 
[4,] 1,4,3,2 
[5,] 1,3,2,4 
[6,] 2,1,3,4 
[7,] 4,3,2,1 
[8,] 4,1,3,2 
[9,] 2,4,3,1 
[10,] 1,4,2,3 

我正在創建一個隨機化表,每個單元格表示每個調查對象的4個調查問題的排序。最終,我想創建多個像上面那樣的列,因此爲每個隨機化項目維護4列將會產生一個難以閱讀的大型隨機表。

+1

遲早你會發現長格式表格(谷歌,看看是什麼意思)會對你的任務更好用 – eddi

回答

-1

無論你做什麼,你最終會得到character s,我希望你不會感到驚訝。

apply(grp1,1,paste,collapse=",") 

給你一個矢量結果。你可以把它變成這樣的矩陣:

matrix(apply(grp1,1,paste,collapse=","),ncol=1) 

請參閱?applyapply()巨大有用。

+0

如果這是他們正在尋找的東西,從長遠來看,以下將是一個更快的選擇:'do.call(paste,c(data.frame(grp1),sep =「,」))' – A5C1D2H2I1M1N2O1R2T1

2

您的主要問題是您需要使用功能I()來保護list strucuture。你的第二個問題是你需要返回一個list結構replicate()這是返回一個矩陣(因爲你有一組等長向量)。設置simplify = FALSE並記下置操作t發生....

grp1 <- replicate(N, t(sample(seq(1:4), 4, replace = FALSE)) , simplify = FALSE) 

as.data.frame(I(grp1)) 
#  I(grp1) 
#1 2, 4, 3, 1 
#2 4, 2, 1, 3 
#3 2, 4, 1, 3 
#4 1, 4, 3, 2 
#5 1, 3, 2, 4 
#6 2, 1, 3, 4 
#7 4, 3, 2, 1 
#8 4, 1, 3, 2 
#9 2, 4, 3, 1 
#10 1, 4, 2, 3 

# And just to check... 
sapply(as.data.frame(I(grp1)) , mode) 
I(grp1) 
"list" 

不過,我不知道這是爲什麼你有用比一個普通的老data.frame或者甚至可能爲您更好地使用 - 情況下,listmatrices

+0

+1。如果值的數量很小(這裏是4),但是組的數量很大(這裏是10,但是我們想象10K組),但是最好先生成所有的排列(用[this one]這樣的函數( http://stackoverflow.com/a/20199902/1270695)),然後對行進行採樣而不是重複調用'sample'。但是,如果值的數量很大,則生成排列可能會比反覆調用樣本要慢。 – A5C1D2H2I1M1N2O1R2T1

相關問題