对于嵌套的循环,if / else给出不完整的输出

时间:2017-12-03 21:48:01

标签: r for-loop if-statement dataframe

我正在尝试使用分层标准对数据框列表执行计算。 IE优选地使用标准1,但如果不是,则标准2是好的。如果数据框不满足,则转到标准3等。

我想返回3个36个观察列表(在我的数据框中为nrow)&按我的标准过滤。但是,类别1或类别2都没有返回36个观察结果。这是为什么?

这是一个可重复的例子:

int sqrt_n = sqrt(n);
  #pragma omp parallel for schedule(static, chunksize) num_threads(16)
  for (int i = 2; i < sqrt_n; i++) {
      if(array[i] != 0){
          #pragma omp atomic write
          //printf("%d ", i);
      }
      for (int j=i*i;j<n;i++){
          #pragma omp atomic write
          array[j] = 1;
      }
  }
  #pragma omp parallel for schedule(static, chunksize) num_threads(16)
  for(int i = sqrt_n+1; i < n; i++){
      if(!array[i]){
          #pragma omp atomic write
          //printf("%d ", i);
      }
  }

提前感谢您提供的任何帮助和建议。

编辑:我设法解决了这个问题。 'Category x '旁边的[i]的位置是错误的。此外,不需要使用多个类别。

#dummy data

d1 <- data.frame(a=rnorm(6), b=1:6, c=rnorm(6), d = rnorm(6), e = rnorm(6))
d2 <- data.frame(a=1:6, b=rnorm(6), c =rnorm(6), d = rnorm(6), e = rep(NA, 
times = 6))
d3 <- data.frame(a=1:6, b=rnorm(6), c= rnorm(1:6), d = rep(NA, times = 6), e 
= rnorm(6))
d4 <- data.frame(a=1:6, b=rnorm(6), c =rnorm(6), d = rnorm(6), e = rep(NA, 
times = 6))
d5 <- data.frame(a=rnorm(6), b=1:6, c=rnorm(6), d = rep(NA, times = 6), e = 
rnorm(6))
d6 <- data.frame(a=rnorm(6), b=1:6, c=rnorm(6), d = rep(NA, times = 6), e = 
rep(NA, times = 6))

my_test_data <- list(d1, d2, d3, d4, d5, d6)
test_data_rows <- rbind.fill(my_test_data)

#seperate into categories

Category1 <- list()
Category2 <- list()
Category3 <- list()

for (i in 1:NROW(test_data_rows)) {
if (!is.na(test_data_rows$e[i] == TRUE)) {
Category1[i] <- test_data_rows$e[i]*test_data_rows$c[i]*(test_data_rows$b[i] 
/ test_data_rows$a[i])
} else if (!is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i]) 
== TRUE) {
Category2[i] <- (0.432 * test_data_rows$d[i] * (test_data_rows$b[i] / 
test_data_rows$a[i]))
} else if (is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i] == 
TRUE)) {
Category3[i] <- (0.101 * 0.432*(test_data_rows$b[i] / test_data_rows$a[i]))
}
}

1 个答案:

答案 0 :(得分:3)

VICTORY!我设法解决了这个问题。 [i]在“分类”&#39;旁边的位置错了。此外,无需使用多个类别。

for (i in 1:NROW(test_data_rows)) {
if (!is.na(test_data_rows$e[i] == TRUE)) {
Category1[i] <- test_data_rows$e[i]*test_data_rows$c[i]*(test_data_rows$b[i] 
/ test_data_rows$a[i])
} else if (!is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i]) 
== TRUE) {
Category1[i] <- (0.432 * test_data_rows$d[i] * (test_data_rows$b[i] / 
test_data_rows$a[i]))
} else if (is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i] == 
TRUE)) {
Category1[i] <- (0.101 * 0.432*(test_data_rows$b[i] / test_data_rows$a[i]))
}
}