近期,公众号的小伙伴们提问的频率越来越高,以前都是在私信回答。现在想来,倒不如整理成帖,供大家学习和参考,独乐乐不如众乐乐,大概就是这么个道理。
首先作出声明:
- 问题的回复是按照小伙伴们私信时间逐一进行答复的,没有等到自己问题回复的小伙伴不要着急;
- 博主自知学识浅薄,回复各位小伙伴的问题也都是根据自己的理解以及查阅资料整理而来的,若有不足之处,烦请留言指正;
- 如果对某些问题有更深入的讨论,请加博主私人微信号(zr931534548)讨论。
第一期首先回答“梅花小猪”的提问
首先这位小伙伴提的问题有点模糊,是要将上三角矩阵导入R进行计算吗?思来想去,我就将矩阵数据的导入与导出做了一个归纳,其中涉及到上、下三角矩阵的提取。
##矩阵数据的导出#创建矩阵m1 1:
c("c1","c2","c3","c4")))m1 c1 c2 c3 c4r1 1 5 1 5r2 2 6 2 6r3 3 7 3 7r4 4 8 4 8
在R语言中可以使用matrix()函数来创建矩阵,其语法格式如下:
matrix(data=NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
参数含义如下:
data:矩阵的元素,默认为NA,即未给出元素值的话,各项为NA
nrow:矩阵的行数,默认为1;
ncol:矩阵的列数,默认为1;
byrow:元素是否按行填充,默认按列;
dimnames:以字符型向量表示的行名及列名。
#导出矩阵write.csv (m1, file ="C:/Users/Administrator/Desktop/m1.csv",
sep ="", row.names =TRUE, col.names =TRUE, quote =TRUE)
其中:
x:需要导出的数据
file:导出的文件路径
sep:分隔符,默认为空格(" "),也就是以空格为分割列
row.names:是否导出行序号,默认为TRUE,也就是导出行序号
col.names:是否导出列名,默认为TRUE,也就是导出列名
quote:字符串是否使用引号表示,默认为TRUE,也就是使用引号表示
##矩阵转换为上三角矩阵m2m2[lower.tri(m2)]=0m2 c1 c2 c3 c4r1 1 5 1 5r2 0 6 2 6r3 0 0 3 7r4 0 0 0 8##矩阵转换为下三角矩阵m3m3[upper.tri(m3)]=0m3 c1 c2 c3 c4r1 1 0 0 0r2 2 6 0 0r3 3 7 3 0r4 4 8 4 8##矩阵数据的导入m1"C:/Users/Administrator/Desktop/m1.csv",row.names = m1m1as.matrix(m1,row.names =is.matrix(m1)# TRUE#提取上三角矩阵数据m4m4[lower.tri(m4)]=0m4 c1 c2 c3 c4r1 1 5 1 5r2 0 6 2 6r3 0 0 3 7r4 0 0 0 8
总结
总的来说,如果矩阵数据量庞大,但又只想要上三角矩阵的数据进行数据处理,我建议将整个矩阵数据导入后,将下三角矩阵的数据全部变为0,然后再进行后面的运算。