экспорт и форматирование data.frame как таблицы .dat - PullRequest
0 голосов
/ 26 мая 2020

Мне нужна помощь в создании входного файла (например, df.dat) из data.frame для устаревшей программы, которая имеет очень строгие требования к форматированию. В этом примере data.frame:

location <- rep("GDWC1",6)
monyear <- rep(0215, 6)
day <- c(6,7,8,9,10,11)
value <- c(750.00, 3516.00, 8295.00, 11064.00, 3264.00, 111796.00)
df <- data.frame(location, monyear, day, value)
head(df)
# location monyear day  value
#1    GDWC1    0215   6    750
#2    GDWC1    0215   7   3516
#3    GDWC1    0215   8   8295
#4    GDWC1    0215   9  11064
#5    GDWC1    0215  10   3264
#6    GDWC1    0215  11 111796

Мой желаемый формат экспорта файла (например, в формате .dat, .txt) - это без заголовка или идентификаторов строк, 6 пробелов между первым и вторым столбцом (который всегда четыре значения - здесь 0215), выровненный по правому краю 3-й столбец (2-3 пробела между 2-м и 3-м столбцами) и как минимум 2 пробела между 3-м и 4-м столбцами и добавление .00 к 4-му столбцу с принудительным десятичным выравниванием.

желаемый df.dat:

GDWC1      0215   6     750.00
GDWC1      0215   7    3516.00
GDWC1      0215   8    8295.00
GDWC1      0215   9   11064.00
GDWC1      0215  10    3264.00
GDWC1      0215  11  111796.00

Мне не удалось получить write.table() интервалы между столбцами, правильную юстировку столбца дня и десятичное выравнивание столбца значений все верно. Любые идеи? Спасибо!

1 Ответ

1 голос
/ 26 мая 2020

Вот подход с sprintf:

result <- apply(df,1,function(x){
  paste0(x["location"],
         sprintf("%6s",""),
         sprintf("%04s",x["monyear"]),
         sprintf("%4s",x["day"]),
         sprintf("%11.2f",as.numeric(x["value"]))
         )})
write.table(result,
            file = "file.dat",
            col.names = FALSE,
            row.names = FALSE,
            quote = FALSE)

system("cat file.dat")
GDWC1      0215   6     750.00
GDWC1      0215   7    3516.00
GDWC1      0215   8    8295.00
GDWC1      0215   9   11064.00
GDWC1      0215  10    3264.00
GDWC1      0215  11  111796.00

См. help(sprintf) для получения подробной информации о том, как работает формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...