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


71

我正在使用以下代码创建数据框:

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表,我不希望表中存在行名。


1
您不清楚“当我打印出df时”是什么意思。是row.names = FALSEwrite.table有关?
亨里克2014年

@Henrik可能在这里提供了最好的解决方案。我不知道为什么要这样做attributes(df)$row.names <- NULL会抹除df的所有值
David Arenburg 2014年

我所说的“当我打印出df时”是指我输入df终端,然后打印出数据帧。我没有,write.table因为我没有写表(当我这样做时,我将使用xtable)。
Dom Abbott 2014年

9
所以print(df, row.names = F)应该做
David Arenburg 2014年

@DavidArenburg您的正确,可行!但是我怎么把它放到html表中呢?
Dom Abbott 2014年

Answers:


94

您已成功删除行名。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

编辑:如注释中所述,您要将其转换为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 2014年

@DomAbbott在R文档中,data.frame“是list给定类' data.frame'的具有相同行名的具有相同行数的变量的a 。如果不包括变量,则行名决定行数。” 因此,行名称始终存在于属性中。您如何进行转换?
Anders Ellern Bilgrau 2014年

转换是什么意思?我正在使用此代码创建html表,print(xtable(df), type="html", file="example.html")但这包括行名。
Dom Abbott 2014年

@DomAbbott将此评论添加到您的帖子中,因此我们知道您要完成的工作。
zx8754 2014年

@DomAbbott我已经编辑过,所以您会得到想要的。您需要使用include.rownames参数。
Anders Ellern Bilgrau 2014年

28

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

row.names(df) <- NULL

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

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

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

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

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

希望这对Google的帮助:)



1

尽管我的回答旨在发表评论,但由于我没有足够的声誉,我认为它仍将是一个有用的答案,并且对某些人有所帮助。

我发现处理datatable起来很library DT健壮rownames,并且columnames

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

有关使用场景,请参阅https://rstudio.github.io/DT/


0

最近,当我使用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.