现在我有一个类似下面的矩阵,我无法访问特定列,但使用matrixname [,3]来访问
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 8 2 10 9 NA NA NA NA NA NA
[2,] 10 2 8 NA NA NA NA NA NA NA
[3,] 8 6 9 NA NA NA NA NA NA NA
[4,] 1 3 10 8 NA NA NA NA NA NA
[5,] 4 6 9 NA NA NA NA NA NA NA
[6,] 8 2 10 9 NA NA NA NA NA NA
[7,] 1 8 3 NA NA NA NA NA NA NA
[8,] 2 6 4 NA NA NA NA NA NA NA
当循环的i值为2时,我正在使用循环,我需要合并第一列和第二列值,如8,2 10,2。当我的循环i为3时,我必须将第1列合并到第3列,如8,2,10。
或者有没有更好的方法来轻松合并列值?稍后我需要将合并值8,2与另一个矩阵进行比较,以检查它是否存在。
我有另一个使用
形成的矩阵
df1 <- cSplit(data.frame(a = gsub('<-', '', trans$V1)), 'a', ' ','wide') aw <- cbind(df1, rules[,-1])
a_1 a_2 a_3 V2 V3
1: 10 8 3 7 0.318182
2: 3 8 10 7 0.437500
3: 8 3 10 7 1.000000
4: 3 8 NA 22 0.448980
5: 8 3 NA 22 0.846154
6: 9 8 10 7 0.437500
我使用subset(aw,is.na(a_3))
删除NA的行,然后我想使用循环合并a_2和a_3,因为我可能有a_4或a_5。
期望的输出:
a_1 a_2,a_3 V2 V3
1: 10 8,3 7 0.318182
2: 3 8,10 7 0.437500
3: 8 3,10 7 1.000000
4: 3 8,NA 22 0.448980
5: 8 3,NA 22 0.846154
6: 9 8,10 7 0.437500
答案 0 :(得分:2)
我们可以使用for
循环(在这种情况下,创建一个对象来存储输出)或使用其中一个apply
族函数,即sapply/lapply
。在这种情况下,循环遍历列的序列,我们仅使用前3列。对matrix
,paste
行进行子集化,并将输出分配给已创建的'lst'。
lst <- vector("list", 3);
for(i in seq_along(lst)){
lst[[i]] <- do.call(paste,
c(as.data.frame(m1[, 1:i, drop=FALSE]), list(sep=",")))
}
lst
#[[1]]
#[1] "8" "10" "8" "1" "4" "8" "1" "2"
#[[2]]
#[1] "8,2" "10,2" "8,6" "1,3" "4,6" "8,2" "1,8" "2,6"
#[[3]]
#[1] "8,2,10" "10,2,8" "8,6,9" "1,3,10" "4,6,9" "8,2,10" "1,8,3" "2,6,4"
如果我们需要matrix
,rbind
或cbind
list
的输出
do.call(cbind, lst)