R的mtcars数据集中的第一列是什么?

12

我觉得我对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]访问它们。而且也没有列名/标题。
我该如何创建这样的数据框?我如何使用这个特殊的列来描述绘图中的数据呢?

6
它们是行名称。rownames(mtcars) - zx8754
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)

2
行名?!这超出了我的Excel宇宙!太好了!;) - buhtz
1
要删除行名,您只需执行 rownames(mtcars) <- NULL。此外,当您执行 mtcars$mpg 时,您正在将 mpg 变量提取为向量。 - Sotos
2
因为通过上述操作我们正在删除数据框架属性并将其转换为向量,请改用 mtcars["mpg"] - zx8754
因此,如果您想添加新列的最终解决方案是col1 <- dimnames(mtcars)[[1]] ver <- as.data.frame(col1) colnames(ver)[1] <-“col1” mtcars <- data.frame(mtcars,ver) - lolo
2
我认为这个简单的参数可以很好地完成任务。df <- cbind(new_col_name =rownames(mtcars), data.frame(mtcars, row.names=NULL))。分配“new_col_name”将替换默认的“rn”列名。 - linkonabe
显示剩余4条评论

4
使用 `data.table` 包的简短一行代码,可以将 `rowname` 转化为一个列。
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

3

使用tibble也可以实现此目的。

library(tibble)
mtcars %>%
  rownames_to_column(var="carnames")

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()将列转换为行名,则它更简单且更强大。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接