我正在使用以下代码创建一个数据框:
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 表,我不希望行名出现在表中。
write.table
中的 row.names = FALSE
是否相关?
attributes(df)$row.names <- NULL
的事情会删除 df 中的所有值
df
,然后打印出数据帧。我没有 write.table
,因为我没有写表(当我写表时,我将使用 xtable)。
print(df, row.names = F)
应该做
您已成功删除行名称。如果没有行名,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。从 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>
是的,我知道已经过了半年多了,有点晚了,但是
row.names(df) <- NULL
确实有效。至少对我来说:-)
如果您在 row.names 中有重要信息,例如日期,我所做的只是:
df$Dates <- as.Date(row.names(df))
这将在末尾添加一个新列,但如果您希望它位于数据框的开头
df <- df[,c(7,1,2,3,4,5,6,...)]
希望这对谷歌的人有所帮助:)
如果您想通过 kable
格式化您的表格,您可以使用 row.names = F
kable(df, row.names = F)
dplyr
解决方案:
df = df %>% `rownames<-`( NULL )
最近我在使用 htmlTable() ('htmlTable' 包) 时遇到了同样的问题,我找到了一个更简单的解决方案:使用 as.matrix() 将数据框转换为矩阵:
htmlTable(as.matrix(df))
并确保行名只是索引。 as.matrix() 保留相同的列名。而已。
更新
在@DMR 的评论之后,我没有注意到 htmlTable()
对于这种情况具有参数 rnames = FALSE
。所以更好的答案是:
htmlTable(df, rnames = FALSE)
rnames
参数:htmlTable(df, rnames = FALSE)
我的回答是为了发表评论,但由于我没有足够的声誉,我认为它仍然可以作为答案并帮助一些人。
我发现 library DT
中的 datatable
可以很好地处理 rownames
,并且 columnames
Library DT
datatable(df, rownames = FALSE) # no row names
使用场景参考https://rstudio.github.io/DT/
...或者简单地说:
library(tidyverse)
df_data_with_rownames %>%
SOME STUFF %>%
tibble::remove_rownames() -> wrangled_df_data_without_rownames
另一种简单的方法是将 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 年 7 月 9 日创建
不定期副业成功案例分享
attributes(df)
时,我得到这个结果:$row.names [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
。这不表示行名仍然存在吗?基本上我想要做的是将 DF 转换为 HTML 表,我只是不希望出现行名。data.frame
是“在给定类 'data.frame
' 的情况下,具有相同行数且具有唯一行名的变量的list
。如果不包含任何变量,则行名确定行数。”因此,行名始终存在于属性中。你如何进行转换?print(xtable(df), type="html", file="example.html")
,但这包括行名。include.rownames
参数。