r语言 - for 循环依赖于以前的迭代值不起作用



我正在为我的数据集"识别"编写一个 for 循环,其中每个迭代都依赖于以前的迭代。我想要这样

  1. 如果以前的迭代在 male.year 中没有与当前迭代在 male.previousyear 中的值相同,则 malerematingstatusb = 0
  2. 如果任何先前的迭代在"male.year"中的值与当前迭代
  3. 在"male.previousyear"中的值相同,并且该迭代在"pair"中的值也与当前迭代相同,则"malerematingstatusb" = 1
  4. 如果任何先前的迭代在"male.year"中的值与当前迭代在">
  5. male.previousyear"中的值相同,并且该迭代在"pair"中的值与当前迭代的值不同,并且该迭代的放置日期为<=当前迭代的"last.seen.female"列中的值,则malerematingstatusb = 2
  6. 如果任何先前的迭代在"male.year"中的值与当前迭代在">
  7. male.previousyear"中的值相同,并且该迭代在"pair"中的值与当前迭代的值不同,并且该迭代的铺设日期>当前迭代的"last.seen.female"列中的值,则malerematingstatusb = 3

这是我正在使用的代码:

for(i in 1:length(identified$year)) {
  ifelse(
(!(identified$male.previousyear[i] %in% identified$male.year[1:i-1])), 
identified$malerematingstatusb[i] <- 0,
ifelse(
  (nrow(subset((subset(identified, identified$male.previousyear[i] == identified$male.year[1:i-1],)), identified$pair[i] == identified$pair[1:i-1],)) > 0),
  identified$malerematingstatusb[i] <- 1, 
  ifelse(
  (nrow(subset((subset((subset(identified, identified$male.previousyear[i] == identified$male.year[1:i-1],)), identified$pair[i] != identified$pair[1:i-1],)), identified$layingdate[i] <= identified$last.seen.female[1:i-1],)) > 0),
    identified$malerematingstatusb[i] <- 2, 
     ifelse(
    (nrow(subset((subset((subset(identified, identified$male.previousyear[i] == identified$male.year[1:i-1],)), identified$pair[i] != identified$pair[1:i-1],)), identified$layingdate[i] > identified$last.seen.female[1:i-1],)) > 0),
      identified$malerematingstatusb[i] <- 3,
      identified$malerematingstatusb[i] <- NA)))) }

这一切都有效,除了所有应该为 3 的值也是 2。这让我认为尝试让代码查看以前的迭代值是一个问题,<=当前迭代值。我已经检查过了,"layingdate"和"last.seen.female"都是数字形式。

我尝试将"last.seen.female"前面的符号更改为 == 和 !=,似乎它只是在"last.seen.female"[1:i-1] 中搜索"layingdate"[i] 的值,但搜索所有以前的迭代,而不仅仅是它应该查看的子集中的迭代。不知道这是为什么。有什么帮助吗?

我想你可能混淆了两个变量的迭代次数:

identified$layingdate[i] --> identified$layingdate[1:i-1]

identified$last.seen.female[1:i-1] --> identified$last.seen.female[i] .

我找到了答案,通过丢失"子集"函数并使用 [] 代替它似乎有效:

for(i in 1:length(identified$year)) {
  ifelse(
(!(identified$male.previousyear[i] %in% identified$male.year[1:i-1])), 
identified$malerematingstatusb[i] <- 0,
ifelse(
  (nrow(identified[(identified$male.previousyear[i] == identified$male.year[1:i-1]) & (identified$pair[i] == identified$pair[1:i-1]),]) > 0),
  identified$malerematingstatusb[i] <- 1, 
  ifelse(
  (nrow(identified[(identified$male.previousyear[i] == identified$male.year[1:i-1]) & (identified$pair[i] != identified$pair[1:i-1]) & (identified$layingdate[i] <= identified$last.seen.female[1:i-1]),]) > 0),
    identified$malerematingstatusb[i] <- 2, 
     ifelse(
    (nrow(identified[(identified$male.previousyear[i] == identified$male.year[1:i-1]) & (identified$pair[i] != identified$pair[1:i-1]) & (identified$layingdate[i] > identified$last.seen.female[1:i-1]),]) > 0),
      identified$malerematingstatusb[i] <- 3,
      identified$malerematingstatusb[i] <- NA)))) }

最新更新