2016-06-24 156 views
0

我試圖將multcompView字母與總結數據連接成矩陣。我正在使用for loop來運行各個彙總矩陣單元格,並將它們與它們各自的字母連接起來。我幾乎在那裏,但我的矩陣輸出原始數據和粘貼的數據(見下文)。以字符串向量行方式粘貼字符串矩陣

功能:

for (i in 1:nrow(X1)) 
    tableRow = matrix(c(tableRow,paste(tableRow[i],letters$Letters[i],sep = "")),nrow = 1) 

其中: X1是我的彙總表,tableRowX1第一行,並 letters包含我想以連接信。

返回:

[1,] "5.53 ± 0.77" "6.72 ± 1.18" "5.12 ± 0.44" 
"5.24 ± 0.41" "5.53 ± 0.77a" "6.72 ± 1.18a" "5.12 ± 0.44a" "5.24 ± 0.41a" 

所需的輸出:

[1,] "5.53 ± 0.77a" "6.72 ± 1.18a" "5.12 ± 0.44a" "5.24 ± 0.41a" 
+0

如果需要的話可以添加數據。不想混淆這個問題! –

+0

@ZheyuanLi不,列很多,但我想我會試着先解決第一排。 –

+0

一個好主意,但沒有雪茄。 :)我正在逐行創建矩陣,因爲不同的列必須與不同的字母連接起來。您的建議不僅會爲所有行添加一個字母,而且原始非連續數據的討厭的第一行仍然存在! –

回答

1

這將完成所有的工作:

## example matrix 
set.seed(0); X <- round(matrix(runif(12), nrow = 4, ncol = 3), 2) 

#  [,1] [,2] [,3] 
# [1,] 0.90 0.91 0.66 
# [2,] 0.27 0.20 0.63 
# [3,] 0.37 0.90 0.06 
# [4,] 0.57 0.94 0.21 

matrix(paste0(X, letters[1:4]), nrow = nrow(X)) 

#  [,1] [,2] [,3] 
# [1,] "0.9a" "0.91a" "0.66a" 
# [2,] "0.27b" "0.2b" "0.63b" 
# [3,] "0.37c" "0.9c" "0.06c" 
# [4,] "0.57d" "0.94d" "0.21d" 

爲你的數據,你可以這樣做:

matrix(paste0(X1, letters$Letters), nrow = nrow(X1)) 
這裏

備註1

我的例子有一定的缺陷。您已經有X1作爲字符矩陣,而我的示例X是數字。在做paste0()時,數值0.90變成"0.9"(因爲as.character(0.90)給出"0.9")。對於你的數據不會有這樣的行爲。

注2

哦,我居然找到一個方法來避免這種行爲。

X <- format(X) 

#  [,1] [,2] [,3] 
# [1,] "0.90" "0.91" "0.66" 
# [2,] "0.27" "0.20" "0.63" 
# [3,] "0.37" "0.90" "0.06" 
# [4,] "0.57" "0.94" "0.21" 

然後做paste0()是OK:

#  [,1] [,2] [,3] 
# [1,] "0.90a" "0.91a" "0.66a" 
# [2,] "0.27b" "0.20b" "0.63b" 
# [3,] "0.37c" "0.90c" "0.06c" 
# [4,] "0.57d" "0.94d" "0.21d" 
+0

它的工作!驚人!!非常感謝。 :) 爲了保持這個問題,我的最後一行看起來像這樣: 'for(i in 1:nrow(X1)) tableRow = matrix(paste0(X1 [,2],letters $ Letters [i] ),nrow = 1)' –

+0

你是對的,謝謝。這可能是因爲採取了所有步驟來達到這一點。我想如果我粘貼所有這一切將是一個可怕的混亂。但我也認爲for循環可能會導致問題,有人可能會接受。 –