从数据框中删除行名的显示
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 <- 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.names
为FALSE
。
print(df1, row.names = FALSE)
# values group
# -1.4345829 d
# 0.2182768 e
# -0.2855440 f
编辑: 如 cmets 中所述,您希望将其转换为 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>
【讨论】:
按照我上面说的做之后,当我做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
可以很好地处理rownames
和columnames
Library DT
datatable(df, rownames = FALSE) # no row names
使用场景参考https://rstudio.github.io/DT/
【讨论】:
以上是关于从数据框中删除行名的显示的主要内容,如果未能解决你的问题,请参考以下文章