2017-04-20 81 views
1

I`ve得到了下面的文件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”只有最后一列)。对于如何克服这个问题的任何建议,我将非常感激。我很乐意尝试向量作为循环可能不是最好的解决方案。

非常感谢!

+0

为清楚起见,你可以把所需的输出为说正好位于第一行还是两个? – Gladwell

+0

是的,对不起。这是输入文件前3行所需的输出:第一行:GH NA NA AB NA NA CD NA NA第二行:7 8 NA NA 9 10 NA NA 11 12 NA NA第三行:2 D NA NA FR不适用不适用不适用不适用(歉意格式不佳) – Tati

+0

@Tati - 请编辑您的文章以包含该信息。评论很难阅读。 – Parfait

回答

1

如果我的理解正确,您希望out [,1]中的数据[,8],out [,2]中的数据[,9],out [,5]中的数据[,10]等

这应该这样做

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

是的,你正确理解我。非常感谢!我很抱歉编辑不好。今天是我使用这个网站的第一天。非常感谢您的帮助! – Tati

+0

@Tati没问题。不要忘记将答案标记为未来提问者的正确答案。 – Gladwell