如何解决如何在不更改行数和列数的情况下从矩阵创建数据框?
我创建了一个表格,其中结合了数字(相关性)和重要性(星号)。我想将数据转换为数据框以进行进一步处理。我尝试了tibble和as.data.frame,但都将矩阵转换为1xn帧。我显然做错了。但是呢?
R <- matrix(data=-3:2/10,ncol=3,nrow=2,byrow=TRUE)
mystars <- matrix(data=c("* ","* ","***"," ","** "),byrow=TRUE)
R1 <- tibble(paste(R,mystars))
R2 <- as.data.frame(paste(R,mystars),stringsAsFactors = FALSE,byrow=TRUE)
这将提供6x1的小对象和6x1的数据帧,而不是原始的2x3矩阵。
解决方法
您可以使用[]
保留原始矩阵的尺寸。
R[] <- trimws(paste(R,mystars))
# [,1] [,2] [,3]
#[1,] "-0.3 *" "-0.2 *" "-0.1 *"
#[2,] "0 ***" "0.1" "0.2 **"
,
当您paste
个数字和星号在一起时,我们将获得"character"
个数据。但是,除非我们手动进行转换,否则数字将不能很好地转换(删除十进制零,负数比非负数更宽)。
r0 <- R < 0 ## store numbers less than zero
R <- formatC(R,format="f",digits=1) ## format numbers to character
R[!r0] <- sprintf(" %s",R[!r0]) ## insert leading space for non-negative
然后,我们可以将mapply
与paste0
一起使用,并由于具有不错的array
参数而首先转换为dim=
,最后转换为as.data.frame
。>
as.data.frame(array(mapply(paste0,R,mystars),dim=dim(R)))
# V1 V2
# 1 -0.3* -0.2*
# 2 -0.1* 0.0***
# 3 0.1 0.2**
数据:
R <- structure(c(-0.3,-0.1,0.1,-0.2,0.2),.Dim = 3:2)
mystars <- structure(c("* ","* "," ","***","** "),.Dim = 3:2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。