我有一个数据集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损坏了东西,所以它无法继续,还是代码需要指定所有行都已检查。
此的预期输出是数据帧本身。如果它满足循环要求,则该数据帧将是有效的,我可以继续处理该数据。
答案 0 :(得分:1)
假设 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
答案 1 :(得分:0)
假设您将NA视为0。
df[is.na(df)]<-0
while(any(df[,2]:df[,5]) > df[,6]){
df[,6]<-sample(df[,6])
}