从数据框中删除行名称的显示

104
我正在使用以下代码创建数据框:
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

我正在尝试使用此代码here来删除行名称(1、2、3等)。

rownames(df) <- NULL

但是当我打印出df时,它仍然显示行名称。有没有一种方法在创建数据框时不包括行名称? 我找到了一个关于row.name = FALSE的建议,但是当我尝试时只得到了错误(可能我放错了位置)。
编辑:我想做的是将dateframe转换为HTML表格,并且不希望行名存在于表格中。

1
“当我打印 df 时” 这句话的意思不太清楚。在 write.table 中,row.names = FALSE 是否相关呢? - Henrik
@Henrik在这里可能提供了最好的解决方案。不过我想知道为什么像attributes(df)$row.names <- NULL这样的操作会清除df中的所有值。 - David Arenburg
我的意思是“当我打印出df时”,我会在终端输入df,然后数据框会被打印出来。我没有使用write.table,因为我不需要写入表格(而且当我需要时,我会使用xtable)。 - Dom Abbott
9
只需要输入 print(df, row.names = F) 即可。 - David Arenburg
@DavidArenburg 没错,那个方法可以用!但我该如何把它放到 HTML 表格中呢? - Dom Abbott
10个回答

128

您已成功删除行名称。如果没有行名称,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

你可以通过将参数row.names设置为FALSE来在print.data.frame中抑制打印行名和行号。

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

编辑:根据评论所述,您想将其转换为HTML格式。从xtableprint.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>

1
在按照我上面说的做完之后,当我执行attributes(df)时,我得到了这个结果:$row.names [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15。这不是说明行名还在吗?基本上,我想要做的就是将DF转换为HTML表格,而我不想要行名存在。 - Dom Abbott
从R文档中可以得知,data.frame是“具有相同行数和唯一行名称的变量列表,给定类别为'data.frame'。如果不包括变量,则行名称确定行数。”因此,行名称始终存在于属性中。您如何进行转换? - Anders Ellern Bilgrau
转换是什么意思?我正在使用这段代码创建一个HTML表格 print(xtable(df), type="html", file="example.html"),但这会包括行名称。 - Dom Abbott
@DomAbbott 在你的帖子中添加这条评论,这样我们就知道你想要实现什么。 - zx8754
@DomAbbott 我已经编辑好了,这样你就能得到你想要的了。你需要使用 include.rownames 参数。 - Anders Ellern Bilgrau

41

是的,我知道现在已经过去半年多,可能有点晚了,但是...

row.names(df) <- NULL

对我来说,确实有效。 :-)

如果您在row.names中有重要的信息,例如日期,我所做的就是:

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

这将在最后添加一列,但如果您希望将其放在数据框的开头

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

希望这能对来自Google的人有所帮助 :)


17
如果你想通过kable格式化你的表格,你可以使用row.names = F
kable(df, row.names = F)

8
一个 dplyr 的解决方案:
df = df %>% `rownames<-`( NULL )

2
这不是一个“dplyr解决方案”。如果有的话,它是一个magrittr解决方案。但更简单的解决方案是只需调用rownames(df) <- NULL。 - nathaneastwood
请参见 https://dev59.com/HWAf5IYBdhLWcg3wo0Bn#72318941 以获取 tidyverse 解决方案。 - Julien

3
或者简单地说:
library(tidyverse)

df_data_with_rownames %>%
SOME STUFF %>%
tibble::remove_rownames() -> wrangled_df_data_without_rownames

2

最近我在使用htmlTable()('htmlTable'包)时遇到了同样的问题,但我找到了一个更简单的解决方案:使用as.matrix()将数据框转换为矩阵:

htmlTable(as.matrix(df))

请确保行名只是索引。as.matrix()会保留相同的列名。就是这样。

更新

根据@DMR的评论,我没有注意到htmlTable()有一个参数rnames = FALSE适用于这种情况。因此,更好的答案应该是:

htmlTable(df, rnames = FALSE)

1
htmlTable函数有rnames参数:htmlTable(df, rnames = FALSE) - DMR

1

虽然我的回答是为评论而设计的,但由于我没有足够的声望,我认为它仍然可以作为答案并帮助某些人。

我发现 DT 库中的 datatable 对于处理 rownamescolumnames 很强大。

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

请参考https://rstudio.github.io/DT/了解使用场景。


0

我只想添加一点,data.table在打印data.table时有一个选项可以删除行名。

options(datatable.print.rownames = F)

这解决了我的控制台问题以及渲染RMarkdown文件的问题。查看其他打印选项here


0

尝试使用 rownames(df) <- "" 进行简单操作


0
另一种简单的方法是将c()分配给您的rownames,以像这样摆脱行名(感谢@Anders提供的数据):
df <- data.frame(values = rnorm(3), group = letters[1:3],
                  row.names = paste0("RowName", 1:3))
df
#>             values group
#> RowName1 0.4189236     a
#> RowName2 1.8604397     b
#> RowName3 0.7030387     c
rownames(df) <- c()
print(df)
#>      values group
#> 1 0.4189236     a
#> 2 1.8604397     b
#> 3 0.7030387     c

reprex package(v2.0.1)于2022年07月09日创建


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接