最小示例
df <- data.frame(x = c(10, NA, 30, 40, 50),
y = c(10, 20, NA, 40, 50))
df <- df |>
na.omit() |>
`colnames<-`(c("You", "Me"))
>df
You Me
1 10 10
4 40 40
5 50 50
我想将过滤后的数据框的行重新排序,使其从 1 到行数。我知道可以这样写
> rownames(df) <- NULL
> df
You Me
1 10 10
2 40 40
3 50 50
如何使用基本 R 管道实现与 colnames 相同的目的?
提前致谢
托马斯·菲利普斯
也是一样的
rownames
,也就是说你可以这样做创建于 2025-04-30,使用reprex v2.1.1 `
使用
`dimnames<-`()
,您可以一步完成此操作。—并且它不会删除属性!:)
请注意,您使用的
rownames()
和colnames()
实际上是为“类似矩阵”的对象设计的,并且在内部调用dimnames()[[1]]
和names()
/setNames()
。不过,也有等效的数据框函数——row.names()
和setNames()
——:附注: 默认保留行名实际上非常有用,而且是一项特权。有些包(甚至整个Universe)会默认删除行名。
如果你使用或,则不需要被
setNames
或打扰,例如,row.names
as.data.frame.list()
list2DF()
或者
背后的技巧是,他们将
data.frame
视为list
,它没有“行名”的概念,然后将对象重新构造为data.frame
。data.frame
有一个参数row.names
。作为 colnames/names 的替代,可以使用setNames
请注意,这
data.frame
将创建一个干净的数据框对象,不包含任何可能由先前操作遗留的属性。在大多数情况下,这可能被视为一种优势,但有时并非如此。有时清晰比聪明更重要。
在哪里