【问题标题】:R: how to get elements from a vector into specific positions of a new vectorR:如何将向量中的元素放入新向量的特定位置
【发布时间】:2014-05-23 11:58:07
【问题描述】:

我正在使用 R 并且我有以下向量:

odd<- c(1,3,5,7,9,11,13,15,17,19)
even<- c(2,4,6,8,10,12,14,16,18,20)

我想将偶数和奇数结合起来,这样我就可以拥有一个包含以下元素的向量(假设它将被命名为总计)

> total
1,2,3,4,5,6,7,8,9,10...,20.

我尝试循环为:

total<- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) #20 elements

for (i in seq(from=1, to=20, by=2)) 
  for (j in seq(from=1, to=10, by=1))
     total[i]<- odd[j]


for (i in seq(from=2, to=20, by=2)) 
      for (j in seq(from=1, to=10, by=1))
         total[i]<- even[j]

但由于某种原因,这不起作用。我得到了这个向量

>total
17 20 17 20 17 20 17 20 17 20 17 20 17 20 17 20 17 20 19 20

有没有人知道为什么我的循环不适用于这种情况?

当然,这只是一个非常简单的例子,说明我必须处理一个非常大的数据集。

谢谢!

【问题讨论】:

标签: r vector sequences


【解决方案1】:

我相信您的问题是因为您使用代码行将奇数(甚至在第二个循环中)的项目添加到总数中的相同位置:

total[i]<- odd[j]

试试这个;

odd<- c(1,3,5,7,9,11,13,15,17,19)
even<- c(2,4,6,8,10,12,14,16,18,20)

elements = 20
total<- rep(x=0, times=elements) #20 elements

total[seq(from=1, to=length(total), by=2)] = odd
total[seq(from=2, to=length(total), by=2)] = even
total

[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

seq 创建一个值序列,我在此处使用这些值来识别插入奇数和偶数值的位置。

【讨论】:

  • 感谢您的留言@Scott。我完全错过了使用 total[]=odd 甚至是序列的可能性,而不是在我的对象上循环两次!
【解决方案2】:

你的循环是错误的。正如斯科特所提到的,对于j 的所有值,您总共将odd[j] 插入到相同的位置。如果您坚持使用for 循环,那么如果您这样做,您将得到您想要的:

for (j in seq(from=1, to=10, by=1)) {
    total[2*j-1]<- odd[j]
    total[2*j] <- even[j]
}

别人提供的方法不使用循环,更可取。

【讨论】:

  • 感谢您提供循环@Bhas 的示例。是的,我做奇怪的事情是错误的[j]。
最近更新 更多