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

Posted

技术标签:

【中文标题】从数据框中删除行名的显示【英文标题】:Removing display of row names from data frame 【发布时间】:2014-08-17 03:51:08 【问题描述】:

我正在使用此代码创建一个数据框:

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 的建议,但是当我尝试它时,我得到了错误(我可能把它放在了错误的地方)。

编辑:我想做的是将日期帧转换为 html 表格,我不希望表格中出现行名。

【问题讨论】:

不清楚“当我打印出 df”是什么意思。 row.names = FALSE 中的 write.table 是否相关? @Henrik 可能在这里提供了最好的解决方案。我想知道为什么做类似attributes(df)$row.names &lt;- NULL 之类的操作会删除 df 中的所有值 我所说的“当我打印出 df”的意思是我在终端中输入df,然后打印出数据框。我没有write.table,因为我没有写表格(当我写表格时,我将使用 xtable)。 所以print(df, row.names = F) 应该这样做 @DavidArenburg 你是对的,那行得通!但是我怎么把它放到一个 html 表中呢? 【参考方案1】:

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

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

编辑: 如 cmets 中所述,您希望将其转换为 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>

【讨论】:

按照我上面说的做之后,当我做attributes(df)时,我得到这个结果:$row.names [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15。这不表示行名仍然存在吗?基本上我想要做的是将 DF 转换为 HTML 表,我只是不希望出现行名。 @DomAbbott 来自 R 文档,data.frame 是“在给定类 'data.frame' 的情况下,具有相同行数且具有唯一行名的变量的 list。如果没有变量包括在内,行名称决定行数。”因此,行名始终存在于属性中。您如何进行转换? 转化是什么意思?我正在使用此代码创建一个 html 表 print(xtable(df), type="html", file="example.html"),但这包括行名。 @DomAbbott 将此评论添加到您的帖子中,以便我们知道您要完成的工作。 @DomAbbott 我已经编辑过,所以你得到你想要的。您需要使用include.rownames 参数。【参考方案2】:

是的,我知道已经过了半年多了,但有点晚了,但是

row.names(df) <- NULL

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

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

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

这将在末尾添加一个新列,但如果您希望它位于数据框的开头

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

希望这对谷歌的人有所帮助:)

【讨论】:

【参考方案3】:

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

kable(df, row.names = F)

【讨论】:

【参考方案4】:

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

htmlTable(as.matrix(df))

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

更新

在@DMR 的评论之后,我没有注意到htmlTable() 在这种情况下具有参数rnames = FALSE。所以更好的答案是:

htmlTable(df, rnames = FALSE)

【讨论】:

htmlTable 有 rnames 参数:htmlTable(df, rnames = FALSE)【参考方案5】:

dplyr 解决方案:

df = df %>% `rownames<-`( NULL )

【讨论】:

【参考方案6】:

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

我发现library DT 中的datatable 可以很好地处理rownamescolumnames

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

使用场景参考https://rstudio.github.io/DT/

【讨论】:

以上是关于从数据框中删除行名的显示的主要内容,如果未能解决你的问题,请参考以下文章

从R中给定列名和行名的数据集中获取值

如何从数据框中检索行名和列名?

获取具有两个变量和多个行名的 p 值

根据数据绑定组合框中的选定项目从访问数据库中删除

更改数据框行名称

从绑定到数据集的组合框中删除重复项