这里我创建了一个重复的数据集。
set.seed(1234)
m1 = matrix(runif(2000), nrow = 10, ncol = 200)
dim(m1)
[1] 10 200
m2 = matrix(runif(100), nrow = 10, ncol = 10)
dim(m2)
[1] 10 10
我想将1:20
的前m1
列与1st column
矩阵的m2
进行比较。类似地,对于21:40
的下一个m1
列与2nd column
矩阵的m2
,依此类推。最后,将矩阵181:200
的{{1}}列与矩阵m1
的{{1}}列相对。
我编写了以下代码,将10th
矩阵的m2
1st
列与20
矩阵的m1
列进行比较。
1st
如何改善以上m2
进行上述比较。有cc = matrix(NA, nrow(m2), ncol(m2))
for (j in 1:ncol(m2)) {
for (i in 1:nrow(m2)) {
cc[i, j] = ifelse(m1[i, j] < m2[i,1], 1, 0)
}
}
ccvalue = data.frame(cc)
个函数可以做吗?
谢谢。
答案 0 :(得分:1)
您可以利用R中的隐式矢量化对m2的列运行整个m1矩阵。您只需通过一次又一次为同一列设置子集来使m2重复列。例如,v <-c("A","B","C")
可以执行等于v[c(1,1,2,2,3,3)]
的{{1}}。
测试以下代码,如果您有任何疑问,请通知我:
"A","A","B","B","C","C"
正在回答的评论:
# we want to compare m1[,c(1,2,3,...)], with m2[,c(1,1,1,...)]
# summing 1,0,...,1,0,... to get 1,1,...,2,2,...
m2_to_compare <- cumsum(rep(c(1,rep(0,19)),10))
# length should match m1 columns
length(m2_to_compare)
(m1 < m2[,m2_to_compare]) * 1 # turns TRUEs and FALSEs into 1s and 0s
答案 1 :(得分:1)
需要指出的几点:
(1)最好为矩阵m2
设置种子。也许您忽略了这一点。
(2)在提供的代码中,您似乎仅将m2
与10
的前m1
列进行比较。
如果您只想比较10列,则可以这样做:
cc <- (m2 > m1[, c(1:10)])*1