这是一个可重现的代码
A <- matrix(sample(1:12,12,T),ncol=4)
rownames(A) <- letters[1:3]
colnames(A) <- letters[11:14]
矩阵现在看起来像
k l m n
a 9 12 5 12
b 10 9 3 2
c 11 11 9 7
我希望我的矩阵应该看起来像这样
k l m n
a row a column k value 9 12 5 12
b row b column k value 10 9 3 2
c row c column k value 11 11 9 7
与矩阵中的其他值类似(我不是写它因为它变得凌乱)。
这是一个单行。所有矢量化,无需循环。
matrix(sprintf("row %s column %s value %s",
rownames(A)[row(A)],
colnames(A)[col(A)], A),
nrow = nrow(A))
# [,1] [,2] [,3]
# [1,] "row a column k value 12" "row a column l value 10" "row a column m value 5"
# [2,] "row b column k value 5" "row b column l value 7" "row b column m value 6"
# [3,] "row c column k value 10" "row c column l value 9" "row c column m value 7"
# [,4]
# [1,] "row a column n value 12"
# [2,] "row b column n value 2"
# [3,] "row c column n value 9"
使用set.seed(47)
和A <- matrix(sample(1:12,12,T),ncol=4)
复制结果。
这是一个使用两个for
循环的解决方案。感谢@Gregor。
for (i in 1:nrow(A)) {
for (j in 1:ncol(A))
A[i, j] <-
paste("row", rownames(A)[i], "column", colnames(A)[j], "value", A[i, j])
}
A
# k l m n
#a "row a column k value 4" "row a column l value 11" "row a column m value 12" "row a column n value 1"
#b "row b column k value 5" "row b column l value 3" "row b column m value 8" "row b column n value 3"
#c "row c column k value 7" "row c column l value 11" "row c column m value 8" "row c column n value 3"
数据
set.seed(1)
A <- matrix(sample(1:12,12,T),ncol=4)
rownames(A) <- letters[1:3]
colnames(A) <- letters[11:14]
您可以使用以下代码来获得所需内容:
for (i in 1:nrow(A)){
for (j in 1:ncol(A)){
A[i,j]<- paste("row ",rownames(A)[i]," column ",colnames(A)[j]," value ", A[i,j], sep="")
}
}
尝试as.data.frame.table
,然后只需粘贴名称。
x <- as.data.frame( as.table(A))
x
Var1 Var2 Freq
1 a k 2
2 b k 10
3 c k 12
4 a l 5
5 b l 4
6 c l 11
7 a m 4
8 b m 8
9 c m 8
10 a n 5
11 b n 5
12 c n 6
y <- apply(x, 1, function(y) paste(c("row", "column", "value"), y, collapse=" "))
matrix(y, nrow =3, dimnames = dimnames(A))
k l m n
a "row a column k value 2" "row a column l value 5" "row a column m value 4" "row a column n value 5"
b "row b column k value 10" "row b column l value 4" "row b column m value 8" "row b column n value 5"
c "row c column k value 12" "row c column l value 11" "row c column m value 8" "row c column n value 6"
矩阵必须具有所有相同数据类型的值。因此,首先使用as.data.frame()
转换为dataframe。然后使用paste()
创建连接字符串并更新新创建的数据帧中的列k。
B <- as.data.frame(A)
B$k <- paste('row', rownames(B), 'column k value', B$k)
B
# k l m n
# a row a column k value 8 11 8 2
# b row b column k value 7 12 7 2
# c row c column k value 6 6 2 12