Sunday, September 20, 2015
Applying Same Changes to Multiple Dataframes
How to apply the same changes to several dataframes andsave them to CSV:
# a dataframe
a <- data.frame(x = 1:3, y = 4:6)
# make a list of several dataframes, then apply function (change column names, e.g.):
my.list <- list(a, a)
my.list <- lapply(my.list, function(x) {names(x) <- c("a", "b") ; return(x)})
# save dfs to csv with similar lapply-call:
n <- 1:length(my.list)
lapply(n, function(ni) {
write.table(file = paste(ni, ".csv", sep = ""),
my.list[ni], sep = ";", row.names = F)
}
)
Edit:
I'll extend this to a script that reads several files from a directory, applies changes to the files in the same fashion and finally saves files back to the directory (as HERE)
# clean up
rm(list = ls())
setwd(tempdir())
unlink(dir(tempdir()))
# create some files in tempdir:
a <- data.frame(x = 1:3, y = 4:6)
b <- data.frame(x = 10:13, y = 14:15)
write.csv(a, "file1.csv", row.names = F)
write.csv(b, "file2.csv", row.names = F)
# now read all files to list:
mycsv = dir(pattern=".csv")
n <- length(mycsv)
mylist <- vector("list", n)
for(i in 1:n) mylist[[i]] <- read.csv(mycsv[i])
# now change something in all dfs in list:
mylist <- lapply(mylist, function(x) {names(x) <- c("a", "b") ; return(x)})
# then save back dfs:
for(i in 1:n)
write.csv(file = paste("file", i, ".csv", sep = ""),
mylist[i], row.names = F)
Labels:
R
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment