Создание txt файла из кадра данных с определенным форматом фиксированной ширины
У меня есть фрейм данных под названием dfGL
с 22 столбцами и 17000 строк! Имена строк: pressure
, diameter
, roughness
...
Я хочу создать текстовый файл из этого фрейма данных, чтобы:
- 1-й столбец dfGL начинается с позиции 1 текстового файла (строка 1, столбец 1),
- 2-й столбец начинается с позиции 25 (строка 1, столбец 25),
- 3-й столбец начинается с позиции 50 (строка 1, столбец 50),
- и так далее! введите описание изображения здесь
3 ответа
Вот решение, которое работает:
dfGL<- rbind (colnames (dfGL), dfGL)
write.fwf (dfGL, file = paste ("Inpuuuttt", ".txt", sep = ""), width = 25, имена строк = T, имена столбцов = F, цитата = F)
Я бы предложил использовать write.fwf
от gdata
пакет, если вы хотите создать файл с фиксированной шириной. Кажется, что имена столбцов не сохраняются в правильном положении, поэтому, чтобы обойти это, вы можете отформатировать их в соответствии с шириной столбцов, которую вы хотите использовать. formatC
,
library(gdata)
colnames(dfGL) <- formatC(colnames(dfGL), width = 25, flag = " ")
write.fwf(dfGL, file = "C:/Users/sara/Desktop/Inputttt.txt", width = rep(25,ncol(dfGL)), sep="")
Я думаю, что вы пытаетесь получить текстовый файл с разделителями с 24 пустыми столбцами между каждой смежной переменной. Вот своего рода обходное и неуклюжее решение. Он сломается, если у вас есть какие-либо строки с запятыми в любой из ваших переменных, и это раздражает тем, что в строке записано 24 запятых (вы можете считать их с помощью nchar()
) и совершает нарушение, сохраняя данные на диск, а затем считывая их обратно.
# Export your data.frame to a csv file
write.csv(YourDataFrame, file="Path/To/File.csv", row.names=FALSE)
# Read in the lines of the file
fileLinesTemp = readLines("Path/To/File.csv")
# Add a bunch of commas to add columns
fileLinesTemp = gsub(",", ",,,,,,,,,,,,,,,,,,,,,,,,", fileLinesTemp)
# Write the new lines back to the file
fileConn = file("Path/To/File.csv")
writeLines(fileLinesTemp, fileConn)
close(fileConn)