Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从数据帧中删除行,直到满足条件为止_R_Loops_Conditional - Fatal编程技术网

R 从数据帧中删除行,直到满足条件为止

R 从数据帧中删除行,直到满足条件为止,r,loops,conditional,R,Loops,Conditional,我有一个函数remove_fun,它根据某些条件从数据帧中删除行。该函数过于冗长,无法包含,因此下面是一个简化的示例: 假设我有一个名为block_2的数据帧,有两列: Treatment seq 1 29 1 23 3 60 1 6 2 41 1 5 2 44 在本例中,假设我的函数基于块_2$seq中seq的最高值,一次从块_2中删除1行。当我运行此函数一次时,它

我有一个函数remove_fun,它根据某些条件从数据帧中删除行。该函数过于冗长,无法包含,因此下面是一个简化的示例:

假设我有一个名为block_2的数据帧,有两列:

 Treatment seq
       1   29
       1   23
       3   60
       1   6
       2   41
       1   5
       2   44
在本例中,假设我的函数基于块_2$seq中seq的最高值,一次从块_2中删除1行。当我运行此函数一次时,它运行良好,即remove_funblock_2将返回以下输出:

Treatment seq
   1      29
   1      23
   1      6
   2      41
   1      5
   2      44
然而,我不知道的是如何反复实现我的remove_乐趣,直到我将block_2减少到某个维度

我的想法是这样做:

while (dim(block_2_df)[1]>1)#The number of rows of block_2_df{
  remove_fun(block_2_df)
}
new_df_1<-remove_fun(block_2)
new_df_2<-remove_fun(new_df_1)
new_df_3<-remove_fun(new_df_2)
从理论上讲,这将减少块2_df,直到只保留与最低序号对应的观测值

然而,这不起作用。我认为我的问题与我不知道如何迭代使用我的“更新的”block_2_df有关。我想完成的是一些代码,它可以执行以下操作:

while (dim(block_2_df)[1]>1)#The number of rows of block_2_df{
  remove_fun(block_2_df)
}
new_df_1<-remove_fun(block_2)
new_df_2<-remove_fun(new_df_1)
new_df_3<-remove_fun(new_df_2)

while循环不会重新定义block2_df。这应该起作用:

while (dim(block_2_df)[1]>1) {
  block_2_df <- remove_fun(block_2_df)
}

如果您所需要的只是一种将数据帧子集的方法

df <- data.frame(Treatment = c(1, 1, 3, 1, 2, 1, 2),
                  seq = c(29, 23, 60, 6, 41, 5, 44))

df
  Treatment seq
1         1  29
2         1  23
3         3  60
4         1   6
5         2  41
6         1   5
7         2  44

# Decide how many rows you want in output

n <- 6

# Find the top "n" values in the seq variable

head(sort(df$seq), n)
[1]  5  6 23 29 41 44


# Use them in the subset criteria

df[df$seq %in% head(sort(df$seq), n), ]
  Treatment seq
1         1  29
2         1  23
4         1   6
5         2  41
6         1   5
7         2  44

谢谢你的提示。然而,由于某些原因,这仍然不起作用。我在原始帖子中附上了我函数的实际代码,看看你/任何人是否能发现问题。期望的输出是什么?您是否希望最终获取每个治疗组的特定数量的数据帧?while循环应该可以很好地用于重复应用,因此问题出在函数中。实际上,我正在尝试任意减少df,直到达到某个条件,正如我在我的OP中提到的。迭代更改示例代码中的n将根据df$seq的最高值减少数据帧,直到只剩下一行,使用seq的最小值,如示例中所述