11

我认为我缺少关于 R 数据框的基本概念。

head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

这里的车名。这是专栏吗?我不这么认为,因为我无法通过mtcars[,1]. 并且没有列名/标题。

我怎么能创建这样的数据框?例如,我如何使用该特殊列来描述绘图中的数据?

4

4 回答 4

12

它们是行名,要访问它们,请使用:

rownames(mtcars)

对于列名使用 colnames,要查看行名和列名,我们可以使用:

dimnames(mtcars)

修改,例如第一行:

rownames(mtcars)[1] <- "myNewName"

当使用 data.frame 创建数据框时,为行名分配 1:n 的数字。

mydata <- data.frame(x = 1:5)

然后我们可以修改它们:

rownames(mydata) <- paste0("MyName", 1:5)

或者我们可以在创建 data.frame 时添加行名:

mydata <- data.frame(x = 1:5, row.names = paste0("MyName", 1:5))

注意: 行名不是很可靠,例如看这篇文章。(这可能是主观意见,我通过将行名重新分配给列来避免它们)

data.table 和 dplyr 包不喜欢它们。您始终可以将行名重新分配到列中:

mydata$myNames <- rownames(mydata)
于 2016-08-17T07:28:49.843 回答
4

使用data.tablePackage 的较短的 one liner 参数将构成rownamea 列。

library(data.table)
setDT(mtcars, keep.rownames = TRUE[])

head(mtcars)

      rn           mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
于 2020-07-20T17:25:21.883 回答
2

这也适用于tibble.

library(tibble)
mtcars %>%
  rownames_to_column(var="carnames")
于 2020-12-09T23:32:39.610 回答
0
  • 你怎么能创建这样的数据框?=> 您可以使用textshape 包将列转换为行名。见下面的例子

> 列到行名称


library(textshape)

state_dat <- data.frame(state.name, state.area, state.center, state.division)
column_to_rownames(state_dat)
#making 'state.name' to row names in new data 'new_state_dat'
new_state_dat<-column_to_rownames(state_dat, 'state.name')

我建议您不要使用 row.names() 将列转换为行名

例如,我如何使用该特殊列来描述绘图中的数据?

您可以使用superheat,有关详细信息,请参阅https://rlbarter.github.io/superheat/index.html,如果您使用textshape 包而不是row.names()将列转换为行名,它会更简单,更强大

于 2022-03-03T13:30:55.607 回答