如何解决在 R 中构建特定的名称向量
我有 n*m
形式的变量 x = (i,j,a,b)
其中 i,j=1,...,n
和 a,b=1,m
。
我们总是有 i<=j
和 a<=b
。
它们形成了我想在 R 中构建的(稀疏)矩阵的行名。
例如,第一行称为 1,1,1
,第二行称为 1,2
。
自 2,1
起不会调用任何行 i<=j
,同样自 1,2,3,2
起不会调用任何行 a<=b
。
如何在矩阵中自动设置这些行名。顺序不重要。
解决方法
在这里编造一些数据。但是您可以使用 expand.grid()
创建所有可能的组合,然后根据您的规则排除不需要的组合。然后构造一个字符向量,作为矩阵行名的标签。
X <- expand.grid(i = 1:3,j = 1:3,a = 1:3,b = 1:3) %>%
filter(i <= j & a <= b) %>%
mutate(label = paste(i,j,a,b,sep = ",")) %>%
pull(label)
matrix(data = NA,nrow = length(X),ncol = 4,dimnames = list(X))
输出的前几行
[,1] [,2] [,3] [,4]
1,1,1 NA NA NA NA
1,2,1 NA NA NA NA
2,3,1 NA NA NA NA
,
也许你可以试试下面的代码
n <- 2
m <- 3
p <- subset(expand.grid(rep(list(seq(n)),2)),Var1 <= Var2)
q <- subset(expand.grid(rep(list(seq(m)),Var1 <= Var2)
with(
expand.grid(1:nrow(p),1:nrow(q)),cbind(p[Var1,],q[Var2,])
)
给出
Var1 Var2 Var1 Var2
1 1 1 1 1
3 1 2 1 1
4 2 2 1 1
1.1 1 1 1 2
3.1 1 2 1 2
4.1 2 2 1 2
1.2 1 1 2 2
3.2 1 2 2 2
4.2 2 2 2 2
1.3 1 1 1 3
3.3 1 2 1 3
4.3 2 2 1 3
1.4 1 1 2 3
3.4 1 2 2 3
4.4 2 2 2 3
1.5 1 1 3 3
3.5 1 2 3 3
,
这是尝试解决您的问题:
n = 2
m = 2
i = 1
a = 1
df <- expand.grid(i:n,i:n,a:m,a:m)
df[ !(df$Var1 > df$Var2 | df$Var3 > df$Var4),]
apply(df,paste,collapse = ' ')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。