Удаление отображения имен строк из фрейма данных

Я создаю фрейм данных, используя этот код:

df <- data.frame(dbGetQuery(con, paste('select * from test')))

Что приводит к следующему:

    UID      BuildingCode   AccessTime
1   123456   BUILD-1        2014-06-16 07:00:00
2   364952   BUILD-2        2014-06-15 08:00:00
3    95865   BUILD-1        2014-06-06 09:50:00

Затем я пытаюсь удалить имена строк (1, 2, 3 и т. Д.), Как было предложено здесь, используя этот код:

rownames(df) <- NULL

Но затем, когда я распечатываю df, он все еще отображает имена строк. Есть ли способ не включать имена строк при создании фрейма данных? Я нашел предложение о row.name = FALSE, но когда я попробовал, у меня возникли ошибки (возможно, я поместил его не в то место).

РЕДАКТИРОВАТЬ: Я хочу преобразовать рамку даты в таблицу HTML, и я не хочу, чтобы имя строки присутствовало в таблице.


person Dom Abbott    schedule 26.06.2014    source источник
comment
Непонятно, что вы имеете в виду, когда распечатываю df. Имеет ли значение row.names = FALSE в write.table?   -  person Henrik    schedule 26.06.2014
comment
@Henrik, вероятно, предлагает здесь лучшее решение. Мне интересно, почему выполнение чего-то вроде attributes(df)$row.names <- NULL стирает все значения из df   -  person David Arenburg    schedule 26.06.2014
comment
Когда я распечатываю df, я набираю df в терминал, который затем распечатывает фрейм данных. У меня нет write.table, потому что я не пишу таблицу (а когда я это сделаю, я буду использовать xtable).   -  person Dom Abbott    schedule 26.06.2014
comment
так что просто print(df, row.names = F) должен делать   -  person David Arenburg    schedule 26.06.2014
comment
@DavidArenburg правильно, это работает! Но как мне поместить это в таблицу html?   -  person Dom Abbott    schedule 26.06.2014


Ответы (6)


Вы успешно удалили имена строк. Метод print.data.frame просто показывает номера строк, если имена строк отсутствуют.

df1 <- data.frame(values = rnorm(3), group = letters[1:3],
                  row.names = paste0("RowName", 1:3))
print(df1)
#            values group
#RowName1 -1.469809     a
#RowName2 -1.164943     b
#RowName3  0.899430     c

rownames(df1) <- NULL
print(df1)
#     values group
#1 -1.469809     a
#2 -1.164943     b
#3  0.899430     c

Вы можете запретить вывод на печать имен и номеров строк в print.data.frame с аргументом row.names как FALSE.

print(df1, row.names = FALSE)
#     values group
# -1.4345829     d
#  0.2182768     e
# -0.2855440     f

Изменить: Как написано в комментариях, вы хотите преобразовать это в HTML. Из документации xtable и print.xtable видно, что аргумент include.rownames поможет.

library("xtable")
print(xtable(df1), type="html", include.rownames = FALSE)
#<!-- html table generated in R 3.1.0 by xtable 1.7-3 package -->
#<!-- Thu Jun 26 12:50:17 2014 -->
#<TABLE border=1>
#<TR> <TH> values </TH> <TH> group </TH>  </TR>
#<TR> <TD align="right"> -0.34 </TD> <TD> a </TD> </TR>
#<TR> <TD align="right"> -1.04 </TD> <TD> b </TD> </TR>
#<TR> <TD align="right"> -0.48 </TD> <TD> c </TD> </TR>
#</TABLE>
person Anders Ellern Bilgrau    schedule 26.06.2014
comment
После того, как я сделал, как я сказал выше, когда я сделаю attributes(df), я получаю такой результат: $row.names [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15. Разве это не означает, что имена строк все еще там? По сути, я хочу преобразовать DF в таблицу HTML, и я просто не хочу, чтобы имя строки присутствовало. - person Dom Abbott; 26.06.2014
comment
@DomAbbott Из документации R data.frame - это list переменных с одинаковым количеством строк с уникальными именами строк, заданным классом 'data.frame'. Если переменные не включены, имена строк определяют количество строк. Следовательно, имена строк всегда присутствуют в атрибутах. Как вы делаете конверсию? - person Anders Ellern Bilgrau; 26.06.2014
comment
Что вы имеете в виду под конверсией? Я использую этот код для создания html-таблицы print(xtable(df), type="html", file="example.html"), но она включает имена строк. - person Dom Abbott; 26.06.2014
comment
@DomAbbott добавьте этот комментарий к своему сообщению, чтобы мы знали, чего вы пытаетесь достичь. - person zx8754; 26.06.2014
comment
@DomAbbott Я редактировал, чтобы вы получали то, что хотите. Вам нужно использовать аргумент include.rownames. - person Anders Ellern Bilgrau; 26.06.2014

Да, я знаю, что прошло больше полугода и немного поздно, НО

row.names(df) <- NULL

работает. По крайней мере, для меня :-)

И если у вас есть важная информация в row.names, например, в датах, я просто делаю следующее:

df$Dates <- as.Date(row.names(df))

Это добавит новый столбец в конец, но если вы хотите, чтобы он был в начале вашего фрейма данных

df <- df[,c(7,1,2,3,4,5,6,...)]

Надеюсь, это поможет тем из Google :)

person Nedinator    schedule 06.01.2015

Если вы хотите отформатировать свою таблицу с помощью kable, вы можете использовать row.names = F

kable(df, row.names = F)
person Guilherme Parreira    schedule 25.09.2019

Мой ответ предназначен для комментариев, но, поскольку у меня недостаточно репутации, я думаю, что он все равно будет актуален в качестве ответа и поможет кому-то.

Я нахожу datatable в library DT надежным в обращении rownames и columnames

Library DT
datatable(df, rownames = FALSE)  # no row names 

см. https://rstudio.github.io/DT/ для получения информации о сценариях использования.

person Flo    schedule 20.07.2020

Недавно у меня была такая же проблема при использовании htmlTable () (пакет «htmlTable»), и я нашел более простое решение: преобразовать фрейм данных в матрицу с помощью as.matrix ():

htmlTable(as.matrix(df))

И убедитесь, что названия - это просто индексы. as.matrix () сохраняет те же имена столбцов. Вот и все.

ОБНОВИТЬ

Следуя комментарию @DMR, я не заметил, что htmlTable() имеет параметр rnames = FALSE для подобных случаев. Так что лучшим ответом будет:

htmlTable(df, rnames = FALSE)
person CamiloEr    schedule 17.01.2019
comment
htmlTable имеет для этого параметр rnames: htmlTable(df, rnames = FALSE) - person DMR; 24.05.2019

dplyr решение:

df = df %>% `rownames<-`( NULL )
person Soumya Boral    schedule 14.07.2021