написать таблицу с пробелами перед именами строк - PullRequest
0 голосов
/ 01 октября 2019

У меня есть фрейм данных, который записывается в таблицу с именем заголовка вверху. Вот некоторый воспроизводимый код.

library(gdata)
df = as.list(c(1:100))
df = unlist(df)
dim(df) = c(length(df)/5, 5)
array_name = as.data.frame(c("Data:"))
write.fwf(array_name,'new_file.txt',append=T,sep="     ",colnames=F,rownames=F,quote=F)
write.fwf(df,'new_file.txt',append=T,sep="      ",colnames=F,rownames=F,quote=F)

Вот вывод ...

Data:
 1      21      41      61       81
 2      22      42      62       82
 3      23      43      63       83
 4      24      44      64       84
 5      25      45      65       85
 6      26      46      66       86
 7      27      47      67       87
 8      28      48      68       88
 9      29      49      69       89
10      30      50      70       90
11      31      51      71       91
12      32      52      72       92
13      33      53      73       93
14      34      54      74       94
15      35      55      75       95
16      36      56      76       96
17      37      57      77       97
18      38      58      78       98
19      39      59      79       99
20      40      60      80      100

Как мне сделать так, чтобы это выглядело так ...

Data:
        0:        1      21      41      61       81
        5:        2      22      42      62       82
       10:        3      23      43      63       83
       15:        4      24      44      64       84
       20:        5      25      45      65       85
       25:        6      26      46      66       86
       30:        7      27      47      67       87
       35:        8      28      48      68       88
       40:        9      29      49      69       89
       45:       10      30      50      70       90
       50:       11      31      51      71       91
       55:       12      32      52      72       92
       60:       13      33      53      73       93
       65:       14      34      54      74       94
       70:       15      35      55      75       95
       75:       16      36      56      76       96
       80:       17      37      57      77       97
       85:       18      38      58      78       98
       90:       19      39      59      79       99
      100:       20      40      60      80      100

Итак, в основном я хочу:

1) добавить столбец с именем строки, интервалы которого равны 5.

2) сделать каждый столбец справа вверху.

3)сдвиньте все вправо от имени заголовка (в соответствии с первой цифрой последней строки - т.е. "100".

Редактировать / Решение:

Это то, что я сделал, чтобы решитьЯ заменил «df» на «G», потому что это переменная, которую я использовал для моего скрипта.

array_name <- as.data.frame(c("G:"))
G <- as.list(t(dflist2$`1`[2][!dflist2$`1`[2] == ""]))
G <- unlist(G)
dim(G) <- c(length(G)/5, 5)
G <- as.data.frame(G)
G <- cbind(row = 0, G)
for (x in 1:nrow(G)) {
  if (row.names(G[x,]) == "1") {G[x,"row"] = 0
  } else {G[x,"row"] = G[x-1,"row"]+5}
}
row.names(G) <- sprintf("   %i:", G$row)
G <- G[,-1]
write.fwf(array_name, 'new_file.txt', append = TRUE, sep = "", 
colnames = FALSE, rownames = FALSE, quote = FALSE)
write.fwf(G,'new_file.txt',append=TRUE,sep="      ", 
colnames=FALSE,rownames=TRUE,quote=FALSE) 

1 Ответ

2 голосов
/ 01 октября 2019

Вам действительно нужно потратить некоторое время на учебник R или два. У вас много избыточности (создание списка, а затем его удаление) в вашем коде. Я предполагаю, что вы не хотели сбрасывать 95 между 90 и 100, поэтому я начинаю с 5, а не 0:

df <- as.data.frame(matrix(1:100, 20, 5))
array_name <- "Data:"
writeLines(array_name, "new_file.txt")
row.names(df) <- sprintf("%8d:", seq(0, 95, by=5))
write.fwf(df, 'new_file.txt', append=TRUE ,sep="      ", colnames=FALSE,
     rownames=TRUE, quote=FALSE)

В некоторых случаях это просто хорошая практика, например, использование <- вместо = делает ваш кодлегче читать. Использование <code>FALSE вместо F. FALSE является зарезервированным словом и не может быть переназначено. F - это сокращение, которое можно переназначить. Если где-то в вашем коде вы случайно присвоили переменную F любому значению, отличному от 0, ваш код не работает.

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