Я пытаюсь прочитать большой набор данных, состоящий из 1000 наблюдений, затем разделить его по годам и записать .csv для каждого года. Первый цикл for считывает данные, удаляет ненужные переменные и переименовывает столбцы. Второй цикл for говорит: if i == 1
написать таблицу, все остальные итерации добавляют эту таблицу. Когда я запускаю это вне внешнего цикла, он работает нормально. Тем не менее, когда я запускаю всю вещь, нужные файлы .csv (например, «test_data_year_2004.csv») не содержат наблюдений с первой итерации. Кроме того, он записывает файлы .csv, "test_data_year_4.csv", "test_data_year_5.csv" и т. Д. Кажется, что нежелательные имена .csv являются последней цифрой моего вектора "years". Они содержат только заголовки столбцов. Я не уверен, что является причиной этой ошибки. У меня есть догадка, что это вектор "лет". Я постараюсь преобразовать вектор в строку рядом, чтобы увидеть, работает ли цикл по as.character () лучше. Тем не менее, я заметил, что нет никакого потока, связанного с этой проблемой, поэтому я подумал, что не мешало бы создать его и посмотреть другие возможные способы обработки. Ниже мой код.
for(i in 1:1000){
# Sequence to read 1000 rows every iteration and then skip rows that are read
# Will read in total 1M observations
nrow <- (i-1)+(1000-(i-1))
skip <- 1000*(i-1)
print(paste("read =", nrow, "skip =", skip))
# Will throw error when out of lines to read
data <- read.csv(paste(import.path, "test_data.csv", sep = ""), header = F, nrows = nrow, skip = skip )
# Set variables to keep
myvars <- names(data)[c(1:3, 6)]
data <- data[myvars]
# Rename
colnames(data) <- c("hhid", "xcoord", "ycoord", "saleyear")
# Subset data based on years - will have to iterate
years <- unique(data$saleyear)
# Drop first observation - it is variable name
years <- years[-1]
years <- sort(years)
for(j in as.numeric(years)){
data.export <- filter(data, data$saleyear == j)
if(i == 1){
# Write initial file
write.table(data.export, paste(export.path, "test_data_year_", j, ".csv", sep = ""), append = F, row.names = F, sep = ",", col.names = T)
} else {
# Append
write.table(data.export, paste(export.path, "test_data_year_", j, ".csv", sep = ""), append = T, row.names = F, sep = ",", col.names = F)
}
}
}