Anzeige von Zeilennamen aus dem Datenrahmen entfernen

71

Ich erstelle einen Datenrahmen mit diesem Code:

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

Was dazu führt:

    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

Ich bin dann zu versuchen , die Zeilennamen zu entfernen (1, 2, 3, usw.) wie vorgeschlagen hier durch diesen Code verwenden:

rownames(df) <- NULL

Aber wenn ich dann ausdrucke, werden dfimmer noch die Zeilennamen angezeigt. Gibt es eine Möglichkeit, die Zeilennamen beim Erstellen des Datenrahmens nicht einzubeziehen? Ich habe einen Vorschlag gefunden, row.name = FALSEaber als ich ihn ausprobiert habe, habe ich nur Fehler erhalten (ich habe ihn möglicherweise an der falschen Stelle platziert).

BEARBEITEN: Ich möchte den Datumsrahmen in eine HTML-Tabelle konvertieren und möchte nicht, dass der Zeilenname in der Tabelle vorhanden ist.

Dom Abbott
quelle
1
Es ist nicht klar, was Sie unter "wenn ich df ausdrucke" verstehen. Ist row.names = FALSEin write.tablerelevant?
Henrik
@ Henrik bietet hier wahrscheinlich die beste Lösung. Ich frage mich jedoch, warum so etwas attributes(df)$row.names <- NULLalle Werte von df löscht
David Arenburg
Was ich mit "wenn ich df drucke" meine, ist, dass ich dfin das Terminal tippe, das dann den Datenrahmen druckt. Ich habe keine, write.tableweil ich keine Tabelle schreibe (und wenn ich das tue, werde ich xtable verwenden).
Dom Abbott
9
also print(df, row.names = F)sollte es einfach tun
David Arenburg
@ DavidArenburg dein richtiges, das funktioniert! Aber wie würde ich das in eine HTML-Tabelle einfügen?
Dom Abbott

Antworten:

94

Sie haben die Zeilennamen erfolgreich entfernt. Die print.data.frameMethode zeigt nur die Zeilennummern an, wenn keine Zeilennamen vorhanden sind.

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

Sie können das Drucken der Zeilennamen und -nummern print.data.framemit dem Argument row.namesals unterdrücken FALSE.

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

Bearbeiten: Wie in den Kommentaren geschrieben, möchten Sie dies in HTML konvertieren. Vom xtableund print.xtablesiehe Dokumentation, können Sie , dass das Argument include.rownamesden Trick.

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>
Anders Ellern Bilgrau
quelle
1
Nachdem ich das oben Gesagte getan attributes(df)habe, erhalte ich folgendes Ergebnis : $row.names [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15. Bedeutet dies nicht, dass die Zeilennamen noch vorhanden sind? Grundsätzlich möchte ich den DF in eine HTML-Tabelle konvertieren und möchte nur nicht, dass der Zeilenname vorhanden ist.
Dom Abbott
@DomAbbott Aus den R-Dokumenten geht hervor, dass a data.frame" listVariablen mit der gleichen Anzahl von Zeilen mit eindeutigen Zeilennamen in der Klasse ' data.frame' ist. Wenn keine Variablen enthalten sind, bestimmen die Zeilennamen die Anzahl der Zeilen." Daher sind Zeilennamen in den Attributen immer vorhanden. Wie machst du deine Konvertierung?
Anders Ellern Bilgrau
Was meinst du mit Konvertierung? Ich verwende diesen Code, um eine HTML-Tabelle zu erstellen, print(xtable(df), type="html", file="example.html")aber dies schließt die Zeilennamen ein.
Dom Abbott
@DomAbbott füge diesen Kommentar zu deinem Beitrag hinzu, damit wir wissen, was du erreichen willst.
zx8754
@ DomAbbott Ich habe bearbeitet, damit Sie bekommen, was Sie wollen. Sie müssen das include.rownamesArgument verwenden.
Anders Ellern Bilgrau
28

Ja, ich weiß, es ist über ein halbes Jahr später und ein bisschen spät, ABER

row.names(df) <- NULL

funktioniert. Für mich zumindest :-)

Und wenn Sie wichtige Informationen in row.names haben, wie zum Beispiel Datumsangaben, mache ich nur:

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

Dadurch wird am Ende eine neue Spalte hinzugefügt, wenn Sie dies jedoch am Anfang Ihres Datenrahmens möchten

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

Hoffe das hilft denen von Google :)

Nedinator
quelle
3

Wenn Sie Ihre Tabelle über formatieren möchten kable, können Sie verwendenrow.names = F

kable(df, row.names = F)
Guilherme Parreira
quelle
1

Meine Antwort ist zwar für einen Kommentar gedacht, aber da ich nicht genug Ruf habe, denke ich, dass sie als Antwort immer noch relevant sein und jemandem helfen wird.

Ich finde datatablein library DTrobust zu handhaben rownames, undcolumnames

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

siehe https://rstudio.github.io/DT/ für Nutzungsszenarien

Flo
quelle
0

Vor kurzem hatte ich das gleiche Problem bei der Verwendung von htmlTable () ('htmlTable'-Paket) und fand eine einfachere Lösung: Konvertieren Sie den Datenrahmen in eine Matrix mit as.matrix ():

htmlTable(as.matrix(df))

Und stellen Sie sicher, dass die Rownamen nur Indizes sind. as.matrix () behält die gleichen Spaltennamen bei. Das ist es.

AKTUALISIEREN

Nach dem Kommentar von @DMR habe ich nicht bemerkt, dass htmlTable()der Parameter rnames = FALSEfür solche Fälle vorliegt . Eine bessere Antwort wäre also:

htmlTable(df, rnames = FALSE)
CamiloEr
quelle
1
htmlTable hat den rnamesParameter dafür: htmlTable(df, rnames = FALSE)
DMR