大数据集的While循环打印错误结果

时间:2019-01-14 22:33:37

标签: r while-loop

我正在处理一个包含2132个值的大型数据集,其中包含两列,一列指示客户的开始日期,另一列指示结束日期。

我目前正在使用while循环来遍历我的数据集。如果客户的结束日期为NA,则将“ NA”添加到向量s中。如果结束日期大于开始日期,则将两者相减并将该数字加到s上。最后,如果开始日期和结束日期相等,则会在向量s上加上1。

我在向量s中应该具有的第一对值是:NA,1,1,NA,2,1,2。

但是,我的while循环当前正在返回:1,NA,1,1,NA,1,1。

我的while循环逻辑有什么问题?

我的数据集的前几个值是:

a(first)  b(last)
2         NA
3         3
3         3
4         NA
4         5
2         2
2         3

我的代码如下:

x <- 1
while (x <= 2132)
{
  if (is.na(b[x])) 
  {
     s <- c(s,'NA')
  }
  else if(a[x] < b[x])
  {
     s <- c(s,(b[x] - a[x]) + 1)
  }
  else if (a[x] == b[x])
  {
     s <- c(s,1)
  }
  x = x + 1
}   

1 个答案:

答案 0 :(得分:0)

您无需在此处使用forwhile循环。 R编程的核心租户是矢量化的概念。

简而言之,您可以一次实现所有逻辑。为此,我将使用两个ifelse()函数:

d <- data.frame(a = c(2,3,3,4,4,2,2), b = c(NA, 3,3,NA,5,2,3))
d$s <- with(d, ifelse(is.na(b), NA, ifelse(b > a, b -a + 1, 1)))
d
#>   a  b  s
#> 1 2 NA NA
#> 2 3  3  1
#> 3 3  3  1
#> 4 4 NA NA
#> 5 4  5  2
#> 6 2  2  1
#> 7 2  3  2

reprex package(v0.2.1)于2019-01-14创建