У меня есть большой набор данных, и я использовал splitting
, чтобы сделать данные более доступными. Я закончил с ~ 250 расколов. В результате каждый раскол имеет различное количество столбцов, которые пусты. Я хочу удалить пустые столбцы и записать обновленные файлы. Я могу сделать это вручную, но, как я уже упоминал, у меня примерно 250 расколов, поэтому я не могу сделать это для всех.Удаление столбцов NA в нескольких файлах в r
Ниже воспроизводимый пример:
df <- data.frame(Size= c(800, 850, 1100, 1200, 1000),
Value= c(900, NA, 1300, 1100, NA),
Location= c(NA, 'midcity', 'uptown', NA, 'Lakeview'),
Num1 = c(2, NA, 3, 2, NA),
Num2 = c(2,3,3,1,2),
Rent= c('y', 'y', 'n', 'y', 'n'))
Это то, что я до сих пор.
Расщепление:
index <- apply(is.na(df)*1, 1,paste, collapse = "")
s <- split(df, index)
split(df, index)
for (i in 1:length(s))
{write.csv(s[i], file = paste0("Splits/", i, "splits.csv"), row.names=FALSE, na = "")}
Удаление пустых столбцов:
split <- read.csv("Splits/3splits.csv")
updated_split <- split[,colSums(is.na(split))<nrow(split)]
write.csv(updated_split, file = "updated_3split.csv", row.names=FALSE)
split <- read.csv("Splits/2splits.csv")
updated_split <- split[,colSums(is.na(split))<nrow(split)]
write.csv(updated_split, file = "updated_2split.csv", row.names=FALSE)
split <- read.csv("Splits/1splits.csv")
updated_split <- split[,colSums(is.na(split))<nrow(split)]
write.csv(updated_split, file = "updated_1split.csv", row.names=FALSE)
Есть ли способ автоматизировать процесс выше? То, что я подразумеваю под автоматикой, заключается в том, чтобы найти способ удалить пустые столбцы в этих трех файлах, не повторяя одни и те же три строки снова и снова (делать это с 250 файлами на самом деле не вариант).
Редакция 1:
Нравится?
for (i in 1:length(s))
{
lapply(s, function(x) x[,colSums(is.na(x))<nrow(x)])
write.csv(s[i], file = paste0("Splits/", i, "splits.csv"), row.names=FALSE, na = "")
}
Мм, написать функцию, чтобы сделать сделать все три-четыре шага за один раз? Я действительно не уверен, что вы подразумеваете под автоматикой. –
@MikeWise Добавлено объяснение. – Nik
вы можете использовать lapply перед записью файлов. 'lapply (s, function (x) x [, colSums (is.na (x))
Jimbou