r - 根据第一列中所述行的条目确定矩阵中每一行的长度
问题描述
这可能已经在某个地方得到了回答,但是由于我无法很好地描述我需要什么才能让它出现在谷歌上,所以我会尝试这种方式。
基本上我有一个专栏,这只是一个例子,我需要在更大的范围内完成它:
col <- c(2,5,4,3,4)
现在我想使用 cbind 创建一个矩阵,其中第一列是col
. 然后使用 rnorm 填充该矩阵的行,但仅填充到第一列中输入的值的长度,即它应该看起来像这样。
> mat
2 rnorm rnorm NA NA NA
5 rnorm rnorm rnorm rnorm rnorm
4 rnorm rnorm rnorm rnorm NA
3 rnorm rnorm rnorm NA NA
4 rnorm rnorm rnorm rnorm NA
我知道如何使用 for 循环来实现这一点,但我想避免这些以保持低运行时间。提前致谢!
解决方案
matrix
这是从 的输出创建 a 的两种方法lapply
,一种是 using rbind
,另一种是 usingunlist
set.seed(7)
c1 <- c(2,5,4,3,4)
l1 <- lapply(c1,
function(x, y) head(c(rnorm(x), rep(NA, y)), y),
y = max(c1))
m1 <- matrix(unlist(l1),
ncol = max(c1),
byrow = TRUE)
m2 <- do.call(rbind, l1)
# set row names
rownames(m1) <- c1
rownames(m2) <- c1
[,1] [,2] [,3] [,4] [,5]
2 2.2872472 -1.1967717 NA NA NA
5 -0.6942925 -0.4122930 -0.9706733 -0.9472799 0.7481393
4 -0.1169552 0.1526576 2.1899781 0.3569862 NA
3 2.7167518 2.2814519 0.3240205 NA NA
4 1.8960671 0.4676805 -0.8938007 -0.3073283 NA
这也可以通过使用sapply
. 但是,与上述相比,输出是转置的。可以使用t
,但是如果矩阵很大,那会变得很昂贵。
m3 <- sapply(c1,
function(x, y) head(c(rnorm(x), rep(NA, y)), y),
y = max(c1))
colnames(m3) <- c1
matrix
这是一个基于条件有条件地设置值的示例:
t1 <- 0.59
m1[m1 > t1] <- t1
m1[m1 < t1] <- 0
[,1] [,2] [,3] [,4] [,5]
2 0.59 0.00 NA NA NA
5 0.00 0.00 0.00 0 0.59
4 0.00 0.00 0.59 0 NA
3 0.59 0.59 0.00 NA NA
4 0.59 0.00 0.00 0 NA
推荐阅读
- java - Spring Boot - 是否可以将控制器中定义的变量传递给模型类?
- r - 微调轴刻度/轴在ggplot中垂直中断
- c# - 在 c# 中使用 linq 方法编写和下载 csv 文件返回错误数据
- django - Django可以做一个UPDATE INNER JOIN,这意味着根据匹配字段从另一个模型更新一个模型,例如ID
- python - while 循环如何处理类属性
- python - 给定面数和用户的骰子数量,同时掷出多个骰子
- python - 如何从 Spacy 获取合并短语的 POS 标签?
- git - 被拒绝的错误:未能将一些参考资料推送到我的应用程序
- java - 二进制搜索程序返回错误的位置
- python - 如何使用 scipy.integrate 库集成此功能?