我正在为我的数据集“已识别”编写一个for循环,其中每次迭代都依赖于之前的迭代。 我想要它
这是我正在使用的代码:
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.这使我认为在尝试使代码查看先前的迭代值是&lt; =当前迭代值时是一个问题。 我已经检查过,“laydate”和“last.seen.female”都是数字形式。
我尝试改变“last.seen.female”前面的标志,例如到==和!=似乎它只是在“last.seen.female”[1:i-1]中搜索“layingdate”[i]的值,但是在所有先前的迭代中搜索而不仅仅是应该关注的子集中的那些。不知道为什么会这样。 有什么帮助吗?
答案 0 :(得分:0)
我认为你可能混淆了两个变量的迭代次数:
identified$layingdate[i]
- &gt; identified$layingdate[1:i-1]
identified$last.seen.female[1:i-1]
- &gt; identified$last.seen.female[i]
。
答案 1 :(得分:0)
我找到了答案,通过丢失“子集”函数并使用[]进行子集化而不是它似乎有效:
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)))) }