提问
我在写论文的时候有个有趣的任务要做。我有一个2D-matrix
(或data.frame
),如下所示:
CACE cheng cheng2 ding ding_ass sun2
mean 0 -0.000467158 0.01219119 0.004284223 0.003803375 0.004204354
sd 0 0.131911914 0.14457078 0.074447198 0.055980336 0.072260046
sun3
mean 0.004202419
sd 0.072266683
字符串
上面的矩阵描述了几个模型的性能(它们的mean
和sd
)。我想把它们列到论文中,所以需要这样重新塑造它们:
CACE_mean CACE_sd cheng_mean cheng_sd cheng2_mean cheng2_sd
[1,] 0 0 -0.000467158 0.1319119 0.01219119 0.1445708
ding_mean ding_sd ding_ass_mean ding_ass_sd sun2_mean
[1,] 0.004284223 0.0744472 0.003803375 0.05598034 0.004204354
sun2_sd sun3_mean sun3_sd
[1,] 0.07226005 0.004202419 0.07226668
型
这类似于将matrix
或data.frame
展平,但不是传统的long
到wide
整形任务。我想知道我们是否可以使用高级函数来实现它。
数据
原始数据(dput):
structure(c(0, 0, -0.000467157971792085, 0.131911914238178, 0.0121911908647192,
0.144570781843054, 0.00428422254646622, 0.0744471979273107, 0.00380337457776962,
0.0559803359990803, 0.00420435426517323, 0.0722600458117494,
0.00420241918783969, 0.0722666828398023), .Dim = c(2L, 7L), .Dimnames = list(
c("mean", "sd"), c("CACE", "cheng", "cheng2", "ding", "ding_ass",
"sun2", "sun3")))
型
我的尝试
new_names = c(outer(row.names(a),colnames(a),function(x,y){paste(y,x,sep = '_')}))
new_data = t(data.frame(c(a),row.names = new_names))
rownames(new_data) <- NULL
型
效果很好,但我想知道一些其他的想法
4条答案
按热度按时间mxg2im7a1#
您可以根据模式
c
oncatenate单元格和setNames
。字符串
jckbn6z72#
我们可以将矩阵转换为dataframe,将rowname作为单独的列,并将数据转换为更广泛的格式。
字符串
5q4ezhmt3#
和你的方法类似但更紧凑
字符串
使得
型
m4pnthwp4#
我们可以在使用
as.data.frame.table
转换后使用unite
字符串