Для одного отдельного кадра данных, apply
является стандартным способом сделать это.Например, здесь:
df[ , -3] <- apply(df[ , -3], FUN = myFun, na_value = 0, MARGIN = 2)
df
Однако я не знаю, отформатированы ли другие ваши кадры данных точно так же.Но вы можете объединить apply
и lapply
(или mapply
) для выполнения этой операции на всех ваших фреймах данных.
EDIT : Вот более общее (инемного некрасивое или старомодное) решение с петлей for
:
## Define a list of two dataframes:
df <- data.frame("Var1" = c(0:5), "Var2" = c(-5:0), "Var3" = c(0,0,0,0,0,0))
df2 <- data.frame("VarA" = c(0:5), "VarB" = c(-5:0), "VarC" = c(3,3,3,3,3,3))
my_list <- list(df, df2)
## Colnames to consider, and missing values indicator, for each dataframe:
na_values <- list(0, 3) # NA = 0 in the first one, NA = 3 in the second
cols <- list(c("Var1", "Var2"), c("VarA", "VarB"))
## Define an R function to replace a given character by "NA" in a dataframe:
replace_nas <- function(data, cols, na_value){
data[ , cols] <- lapply(data[ , cols], FUN = function(x) {
x[x == na_value] <- NA
return(x)
}
)
return(data)
}
## Do this operation for each dataframe in "my_list" with a for loop:
res_list <- list()
for (k in 1:length(my_list)) {
res_list[[k]] <- replace_nas(my_list[[k]], cols[[k]], na_values[[k]])
}
res_list
Возможно, не оптимально, но оно работает!