我有一个大型数据集,我使用splitting
来使数据更加平易近人。我结束了大约250次分裂。因此,每个拆分具有不同的空列数。我想删除空列并写入更新的文件。我能够手动完成,但正如我所提到的,我有大约250个分裂,所以我不能对所有这些分割。
以下是一个可重现的例子:
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 = "")
}
答案 0 :(得分:2)
也许这个:
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 = "")
sdf <- data.frame(s[i])
updated_split <- sdf[,colSums(is.na(sdf))<nrow(sdf)]
write.csv(updated_split, file = paste0("updated", i, "split.csv"), row.names=FALSE)
}