У меня есть функция для выбора значения из фрейма данных. Я хочу выбрать это значение, сохранить его, удалить из набора данных и выбрать значение, используя ту же функцию, из оставшихся значений в фрейме данных. Как лучше всего это сделать?
Вот простой пример:
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,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
Я не использую функцию max в реальной функции — реальная функция слишком сложна, чтобы использовать ее здесь. В основном мне нужно знать, как использовать функцию для извлечения значения из фрейма данных, а затем повторно применять ту же функцию к обновленному фрейму данных без этого значения.