Экспорт файла и создание двух заголовков на основе одного столбца - PullRequest
1 голос
/ 18 марта 2020

Я даже не уверен, как подойти к этой ситуации, возможно, меня заблокировали. У меня широкий массив данных, что-то вроде этого

Date   Amy_X  Amy_Y  John_X  John_Y
March   14     15     10.5    14.5
April   10     11     15       16

Я хотел бы экспортировать данные в файл CSV в следующем формате

Date   Amy          John
        X     Y     X      Y
March   14    15    10.5   14.5
April   10    11    15     16

Мой первый вопрос: что лучше? подход к достижению этого. Должен ли я разделить Amy_X на Amy и X, а затем создать повторение вектора имен Amy, Amy, John, John и использовать его в качестве другого заголовка. Каково лучшее решение для этого сценария?

1 Ответ

0 голосов
/ 18 марта 2020

В вопросе говорится, что файл нужно вывести в csv, но показанный вывод не является значениями через запятую (csv). Мы показываем оба.

Используя фрейм входных данных DF, определенный в конце в примечании, воспроизводимым, создаем фрейм данных из заголовков и используем на нем Отдельные_строки и привязываем его к DF. Затем сделайте все оставшиеся исправления. Запишите это без названий строк и столбцов и без кавычек. Замените stdout() именем вашего файла.

library(dplyr)
library(tidyr)

DF2 <- DF %>%
  names %>%
  as.list %>%
  as.data.frame %>%
  separate_rows(everything()) %>%
  setNames(names(DF)) %>%
  rbind(DF)

DF2[2, 1] <- DF2[1, duplicated(unlist(DF2[1, ]))] <- ""

output <- capture.output(prmatrix(DF2, quote = FALSE,
  rowlab = rep("", nrow(DF2)), collab = rep("", ncol(DF2))))[-1]
writeLines(output, stdout())

, указав следующее, которое воспроизводит вывод, показанный в вопросе:

Date  Amy       John     
      X    Y    X    Y   
March 14   15   10.5 14.5
April 10   11   15   16  

Если вы действительно хотите использовать csv, тогда используйте это вместо writeLines и заявление до него выше:

write.table(DF2, stdout(), sep = ",", quote = FALSE, row.names = FALSE, 
  col.names = FALSE)

, дающее:

Date,Amy,,John,
,X,Y,X,Y
March,14,15,10.5,14.5
April,10,11,15,16

Примечание

Lines <- "Date   Amy_X  Amy_Y  John_X  John_Y
March   14     15     10.5    14.5
April   10     11     15       16"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE, as.is = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...