在 r 中重复循环,直到一列中的值小于其他几列
Repeat loop in r until the values in one column are less than several other columns
我有一个数据集 df
,其中最后一列 (value
) 包含采样值。在同一数据集中,我还有其他几列(rep1:rep4
),其值需要小于同一行中的采样值。如果不满足此条件,我需要对 value
列重新采样并重试。这需要重复,直到 rep1:rep4
中的数字小于 value
列中的相应数字。
我仍在尝试处理循环,但似乎 while
循环可能是此处使用的内容。
ID rep1 rep2 rep3 rep4 value
1 a NA NA NA NA -400
2 b -400 NA NA NA -300
3 c -400 -300 NA NA -200
4 d -400 -300 -200 NA -300
5 e -400 -300 -200 -300 -400
6 f NA NA NA NA -400
7 g -400 NA NA NA -400
8 h NA NA NA NA -400
9 i NA NA NA NA -200
10 j -200 -300 NA NA -300
11 k -300 NA NA NA -200
12 l NA NA NA NA -300
13 m NA NA NA NA -300
structure(list(ID = structure(1:13, .Label = c("a", "b", "c",
"d", "e", "f", "g", "h", "i", "j", "k", "l", "m"), class = "factor"),
rep1 = c(NA, -400L, -400L, -400L, -400L, NA, -400L, NA, NA,
-200L, -300L, NA, NA), rep2 = c(NA, NA, -300L, -300L, -300L,
NA, NA, NA, NA, -300L, NA, NA, NA), rep3 = c(NA, NA, NA,
-200L, -200L, NA, NA, NA, NA, NA, NA, NA, NA), rep4 = c(NA,
NA, NA, NA, -300L, NA, NA, NA, NA, NA, NA, NA, NA), value = c(-400L,
-300L, -200L, -300L, -400L, -400L, -400L, -400L, -200L, -300L,
-200L, -300L, -300L)), class = "data.frame", row.names = c(NA,
-13L))
这是我的开始:
while(df$value < df$rep1:df$rep4) { repeat sampling process }
抽样过程是一个多步骤过程,必要时我可以包括在内,但可能会使事情过于复杂。根据我对循环的有限理解,如果我遵循 while
的条件 不 满足我的预期结果,它将继续循环(在我的例子中是重新采样)直到value
列每一行的重采样数据都大于 rep1
至 rep4
列中的值。
这带来了几个错误(不足为奇):一个 NA/NaN 参数,以及几个错误,指出尽管 df$rep1:df$rep4 的数值表达式有多个元素,但只使用了第一个。
对于 NA/NaN 参数,我猜测问题是不是所有的 rep 列行都被填充,因此无法将值与 value
列中的值进行比较。对于只使用第一个元素的问题,我不确定那是因为 NA/Nan 破坏了东西,所以它无法继续,或者代码是否需要指定检查所有行。
预期的输出是数据帧本身。如果它通过循环要求,则数据帧将有效,我可以继续使用该数据。
假设您将 NA 视为 0。
df[is.na(df)]<-0
while(any(df[,2]:df[,5]) > df[,6]){
df[,6]<-sample(df[,6])
}
假设
1)我们在计算中忽略了 NA
2)采样过程是当值不是最高值时加100
for (i in 1:nrow(df)){
while (any(df$value[i]<=as.numeric(df[i,2:5])%>%na.omit())){
df$value[i]=df$value[i]+100} #Here you should replace with your sampling process
}
> df
ID rep1 rep2 rep3 rep4 value
1 a NA NA NA NA -400
2 b -400 NA NA NA -300
3 c -400 -300 NA NA -200
4 d -400 -300 -200 NA -100
5 e -400 -300 -200 -300 -100
6 f NA NA NA NA -400
7 g -400 NA NA NA -300
8 h NA NA NA NA -400
9 i NA NA NA NA -200
10 j -200 -300 NA NA -100
11 k -300 NA NA NA -200
12 l NA NA NA NA -300
13 m NA NA NA NA -300
我有一个数据集 df
,其中最后一列 (value
) 包含采样值。在同一数据集中,我还有其他几列(rep1:rep4
),其值需要小于同一行中的采样值。如果不满足此条件,我需要对 value
列重新采样并重试。这需要重复,直到 rep1:rep4
中的数字小于 value
列中的相应数字。
我仍在尝试处理循环,但似乎 while
循环可能是此处使用的内容。
ID rep1 rep2 rep3 rep4 value
1 a NA NA NA NA -400
2 b -400 NA NA NA -300
3 c -400 -300 NA NA -200
4 d -400 -300 -200 NA -300
5 e -400 -300 -200 -300 -400
6 f NA NA NA NA -400
7 g -400 NA NA NA -400
8 h NA NA NA NA -400
9 i NA NA NA NA -200
10 j -200 -300 NA NA -300
11 k -300 NA NA NA -200
12 l NA NA NA NA -300
13 m NA NA NA NA -300
structure(list(ID = structure(1:13, .Label = c("a", "b", "c",
"d", "e", "f", "g", "h", "i", "j", "k", "l", "m"), class = "factor"),
rep1 = c(NA, -400L, -400L, -400L, -400L, NA, -400L, NA, NA,
-200L, -300L, NA, NA), rep2 = c(NA, NA, -300L, -300L, -300L,
NA, NA, NA, NA, -300L, NA, NA, NA), rep3 = c(NA, NA, NA,
-200L, -200L, NA, NA, NA, NA, NA, NA, NA, NA), rep4 = c(NA,
NA, NA, NA, -300L, NA, NA, NA, NA, NA, NA, NA, NA), value = c(-400L,
-300L, -200L, -300L, -400L, -400L, -400L, -400L, -200L, -300L,
-200L, -300L, -300L)), class = "data.frame", row.names = c(NA,
-13L))
这是我的开始:
while(df$value < df$rep1:df$rep4) { repeat sampling process }
抽样过程是一个多步骤过程,必要时我可以包括在内,但可能会使事情过于复杂。根据我对循环的有限理解,如果我遵循 while
的条件 不 满足我的预期结果,它将继续循环(在我的例子中是重新采样)直到value
列每一行的重采样数据都大于 rep1
至 rep4
列中的值。
这带来了几个错误(不足为奇):一个 NA/NaN 参数,以及几个错误,指出尽管 df$rep1:df$rep4 的数值表达式有多个元素,但只使用了第一个。
对于 NA/NaN 参数,我猜测问题是不是所有的 rep 列行都被填充,因此无法将值与 value
列中的值进行比较。对于只使用第一个元素的问题,我不确定那是因为 NA/Nan 破坏了东西,所以它无法继续,或者代码是否需要指定检查所有行。
预期的输出是数据帧本身。如果它通过循环要求,则数据帧将有效,我可以继续使用该数据。
假设您将 NA 视为 0。
df[is.na(df)]<-0
while(any(df[,2]:df[,5]) > df[,6]){
df[,6]<-sample(df[,6])
}
假设 1)我们在计算中忽略了 NA 2)采样过程是当值不是最高值时加100
for (i in 1:nrow(df)){
while (any(df$value[i]<=as.numeric(df[i,2:5])%>%na.omit())){
df$value[i]=df$value[i]+100} #Here you should replace with your sampling process
}
> df
ID rep1 rep2 rep3 rep4 value
1 a NA NA NA NA -400
2 b -400 NA NA NA -300
3 c -400 -300 NA NA -200
4 d -400 -300 -200 NA -100
5 e -400 -300 -200 -300 -100
6 f NA NA NA NA -400
7 g -400 NA NA NA -300
8 h NA NA NA NA -400
9 i NA NA NA NA -200
10 j -200 -300 NA NA -100
11 k -300 NA NA NA -200
12 l NA NA NA NA -300
13 m NA NA NA NA -300