Добавление строки с меньшим количеством столбцов во фрейм данных в R

Допустим, у меня есть фрейм данных 10x10, и я хочу добавить в начало строку только с одним значением (т. Е. Новая строка имеет только один столбец). Кроме того, я хочу, чтобы эта строка располагалась над именами столбцов, поэтому мне нужно было бы превратить имена столбцов в фактические записи во фрейме данных. Как мне это сделать, не добавляя НП?

Вот пример того, что у меня есть (фрейм данных с nrow = 3, заголовками столбцов и ncol = 5):

Name Description Sample1 Sample2 Sample3
2345 gene        1.123   1.532   2.464
3253 gene        2.313   1.531   1.424
2453 gene        1.164   1.597   1.943

И это то, что я хочу (фрейм данных / какой-то объект с nrow = 5 и ncol = 5, но значения NULL в первой строке):

#1.2
Name Description Sample1 Sample2 Sample3
2345 gene        1.123   1.532   2.464
3253 gene        2.313   1.531   1.424
2453 gene        1.164   1.597   1.943

Любая помощь приветствуется.


person hmg    schedule 10.07.2014    source источник
comment
Я предполагаю, что у вас есть несколько data.frames, которые вы хотите вызывать по желанию? Возможно, было бы лучше поместить их в список и дать каждому элементу соответствующие имена.   -  person alexis_laz    schedule 10.07.2014
comment
Что вы на самом деле пытаетесь сделать? Это для отображения или что-то функциональное?   -  person A5C1D2H2I1M1N2O1R2T1    schedule 10.07.2014
comment
Ананда - я буду загружать результат в аналитическое программное обеспечение. Я легко могу просто добавить нужные мне значения, если открою то, что у меня есть в Excel, но у меня будет тонна таких таблиц, которые нужно будет проанализировать, поэтому, если я могу получить сценарий для этого, это будет быть идеальным.   -  person hmg    schedule 10.07.2014
comment
Так что вам просто нужно записать в таком виде на диск. Вам на самом деле не нужно это в data.frame? Потому что то, что вы описали, просто незаконно в data.frame. Вы можете записать data.frame (какие имена столбцов и тому подобное) с помощью write.table(), затем вы можете cat свое значение # 1.2 в тот же файл с помощью append=T, а затем записать следующий data.frame в тот же файл, снова с помощью append=T.   -  person MrFlick    schedule 10.07.2014
comment
Я бы согласился с предложением @MrFlick. Возможно, вы даже можете собрать их в list, создать собственную print функцию и использовать capture.output или sink с вашей новой функцией print.   -  person A5C1D2H2I1M1N2O1R2T1    schedule 10.07.2014
comment
Спасибо всем! Я все еще новичок в R (очевидно). Добавление отлично работает.   -  person hmg    schedule 10.07.2014


Ответы (1)


Основываясь на моем комментарии, я бы попробовал что-то вроде следующего как возможный подход:

Во-первых, несколько примеров данных:

set.seed(1)
A <- data.frame(matrix(rnorm(10), ncol = 5))
B <- data.frame(matrix(rnorm(10), ncol = 5))
C <- data.frame(matrix(rnorm(10), ncol = 5))

Сначала, как предлагается, поместите data.frame в list. Задайте имена элементов list так, чтобы они были напечатаны над data.frame. Здесь я использовал те же имена, что и оригинальные data.frames:

myList <- list(A = A, B = B, C = C)

Во-вторых, создайте пользовательскую функцию print со строкой cat и print.data.frame с любыми дополнительными настройками, которые вам нужны (например, row.names = FALSE).

print.myList <- function(x, ...) {
  invisible(lapply(names(x), function(y) {
    cat("#:", y, "\n")
    print.data.frame(x[[y]], row.names = FALSE)
    cat("\n")
  }))
}

В демонстрационных целях я напишу tempfile(), но на самом деле вы будете писать это в текстовый файл где-нибудь на вашем компьютере.

temp <- tempfile()

Фактически "написание" выполняется capture.output:

capture.output(print.myList(myList), file = temp)

Вот как теперь выглядит наш "временный" файл:

readLines(temp)
#  [1] "#: A "                                                   
#  [2] "         X1         X2         X3        X4         X5"  
#  [3] " -0.6264538 -0.8356286  0.3295078 0.4874291  0.5757814"  
#  [4] "  0.1836433  1.5952808 -0.8204684 0.7383247 -0.3053884" 
#  [5] ""                                                        
#  [6] "#: B "                                                   
#  [7] "        X1         X2          X3          X4        X5" 
#  [8] " 1.5117812 -0.6212406  1.12493092 -0.01619026 0.8212212" 
#  [9] " 0.3898432 -2.2146999 -0.04493361  0.94383621 0.5939013" 
# [10] ""                                                        
# [11] "#: C "                                                   
# [12] "        X1          X2          X3         X4         X5"
# [13] " 0.9189774  0.07456498  0.61982575 -0.1557955 -0.4781501"
# [14] " 0.7821363 -1.98935170 -0.05612874 -1.4707524  0.4179416"

Примечание. Конечно, если вы откроете получившийся файл в текстовом редакторе, вы не увидите [1] чисел, показанных здесь.

person A5C1D2H2I1M1N2O1R2T1    schedule 10.07.2014