ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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 时”是什么意思。 write.table 中的 row.names = FALSE 是否相关?
@Henrik 可能在这里提供了最好的解决方案。我想知道为什么做类似 attributes(df)$row.names <- NULL 的事情会删除 df 中的所有值
我所说的“当我打印出 df”的意思是我在终端中输入 df,然后打印出数据帧。我没有 write.table,因为我没有写表(当我写表时,我将使用 xtable)。
所以只有 print(df, row.names = F) 应该做
@DavidArenburg 你是对的,那行得通!但是我怎么把它放到一个 html 表中呢?

A
Anders Ellern Bilgrau

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

按照我上面所说的做之后,当我做 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 参数。
N
Nedinator

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

row.names(df) <- NULL

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

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

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

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

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

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


G
Guilherme Parreira

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

kable(df, row.names = F)

S
Soumya Boral

dplyr 解决方案:

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

这不是“dplyr 解决方案”。如果有的话,它是一个 magrittr 解决方案。但更简单的解决方案是调用 rownames(df) <- NULL。
C
Community

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

htmlTable(as.matrix(df))

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

更新

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

htmlTable(df, rnames = FALSE)

htmlTable 为此具有 rnames 参数:htmlTable(df, rnames = FALSE)
F
Flo

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

我发现 library DT 中的 datatable 可以很好地处理 rownames,并且 columnames

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

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


K
Kework K. Kalustian

...或者简单地说:

library(tidyverse)

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

Q
Quinten

另一种简单的方法是将 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 日创建