迭代地从数据框中提取值 (R)

Extract a value from a dataframe iteratively (R)

我有一个函数可以 select 来自数据帧的值。我想 select 该值,保存它,将其从数据集中删除,然后 select 使用来自数据框中其余值的相同函数的值。执行此操作的最佳方法是什么?

这是一个简单的例子:

V1 <- c(5,6,7,8,9,10)
df <- data.frame(V1)

V2 <- as.data.frame(matrix(nrow=3,ncol=1))

maximum <- function(x){
  max(x)
}

V2[i,]<- maximum(df)

df <- anti_join(df,V2,by='V1')

我如何设置它以便将最大函数重新应用到 df 中的剩余值并将这些值保存在 V2 中?

我使用的是与 max 不同且更复杂的一组函数和 if/else 语句 - 这只是一个示例。我必须将该函数重新应用于剩余值,因为如果 df 为空,我将在新数据帧上使用该函数。

这是您要找的吗?

V1 <- data.frame(origin = c(5,6,7,8,9,10))

V2 <- as.data.frame(matrix(nrow=3,ncol=1))

df1 <- V1
df2 <- V2

recursive_function <- function(df1,df2,depth = 3,count = 1){
  
  if (count == depth){
    # Find index
    indx <- which.max(df1[,1])
    curVal <- df1[indx,1]
    
    df2[count,1] <- curVal
    
    df1 <- df1[-indx, ,drop = FALSE]
    
    return(list(df1,
                df2))
  } else {
    # Find index
    indx <- which.max(df1[,1])
    # Find Value
    curVal <- df1[indx,1]
    
    # Add value to new data frame
    df2[count,1] <- curVal
    
    # Subtract value from old dataframe
    df1 <- df1[-indx, ,drop = FALSE]
    
    recursive_function(df1,df2,depth,count + 1)
  }
}

recursive_function(df1,df2)

这是我偶然发现的另一个解决方案:

V1 <- c(5,6,7,8,9,10)
df <- data.frame(V1)


minFun <- function(df, maxRun){
  V2 <- as.data.frame(matrix(nrow=maxRun,ncol=1))
  for(i in 1:maxRun){
  V2[i,]<- min(df)
  df <- dplyr::anti_join(df,V2,by='V1')
  }
  return(V2)
}

test <- minFun(df = df, maxRun = 3)
test