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

问题描述

我有一个函数可以从数据框中选择一个值。我想选择该值,保存它,将其从数据集中删除,然后使用相同的函数从数据框中的其余值中选择一个值。这样做的最佳方法是什么?

这是一个简单的例子:

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 中?

(此外,我使用的是一组不同且更复杂的函数和 if/else 语句,而不是 max - 这只是一个示例。我必须将该函数重新应用于剩余的值,因为我将使用如果 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,depth,count + 1)
  }
}

recursive_function(df1,df2)
,

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

V1 <- c(5,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