【问题标题】:double loop output into one matrix双循环输出到一个矩阵
【发布时间】:2017-04-20 17:09:21
【问题描述】:

我有以下 10 行 13 列的文件(例如,实际文件要大得多):

ID1 A B C D E F G H A B C D
ID2 1 2 3 4 5 6 7 8 9 10 11 12
ID3 A B 1 2 C 1 2 D F R T G
...

我需要创建一个新矩阵,其中输入文件的 8-13 列放置在每 4 列中(还有一个条件,但效果很好;问题是循环覆盖了输出) .这是带有循环的脚本:

data=read.table("input file", h=T)
out=matrix("NA",10,12)
for(i in c(1:10)){
for(k in seq(8,13,2){
for(s in seq(1,12,4){
for(q in seq(2,12,4){
out[i,s]=data[i,k]
out[i,q]=data[i,k+1]}}}}

不幸的是,循环覆盖了数据和输出矩阵(命名为“out”只有最后一列)。对于如何克服这个问题的任何建议,我将不胜感激。我很高兴尝试将向量作为循环,这可能不是最好的解决方案。

非常感谢!

【问题讨论】:

  • 为了清楚起见,你能把想要的输出放在第一行或第二行吗?
  • 是的,对不起。这是输入文件前 3 行所需的输出: 第一行:G H NA NA A B NA NA C D NA NA 第二行:7 8 NA NA 9 10 NA NA 11 12 NA NA 第三行:2 D NA NA F R NA NA T G NA NA(为糟糕的格式道歉)
  • @Tati - 请编辑您的帖子以包含该信息。评论很难阅读。

标签: r loops matrix


【解决方案1】:

如果我理解正确,您希望 data[, 8] in out[, 1], data[, 9] in out[, 2], data[, 10] in out[, 5] 等。

应该这样做

out <- matrix(NA, nrow = nrow(data), ncol = 12)
out[, sort(c(seq(1,9,4), seq(2,10,4)))] <- data[, seq(8, 13)]

【讨论】:

  • 是的,你正确地理解了我。非常感谢!我为糟糕的编辑道歉。今天是我使用这个网站的第一天。再次感谢您的帮助!
  • @Tati 没问题。不要忘记将答案标记为对未来提问者的正确答案。
猜你喜欢
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 2021-11-30
  • 2015-03-27
  • 2019-05-10
相关资源
最近更新 更多