1
我有一個很大的數據集,我用splitting
來使數據更容易接近。我結束了約250分裂。因此,每個分組都有不同數量的空列。我想刪除空列並寫入更新的文件。我能夠手動完成,但正如我所提到的,我有大約250次拆分,所以我無法完成所有這些拆分。刪除r中多個文件中的NA列
下面是一個可重複的例子:
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