📅  最后修改于: 2023-12-03 15:09:39.212000             🧑  作者: Mango
在 R 编程语言中,我们可以使用 gather()
函数将数据表格中的行名(即行索引)转化为列。
我们这里以 mtcars 数据集为例子,显示前5行数据如下:
mtcars[1:5, ]
| | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |--|----|----|------|---|------|----|------|----|----|------|------| |Mazda RX4| 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 | |Mazda RX4 Wag| 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 | |Datsun 710| 22.8 | 4 | 108.0 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 | |Hornet 4 Drive| 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 | |Hornet Sportabout| 18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
其中第一列包含了车型名称,作为行名存在。为了便于后续的操作,我们先将第一列转化为一列普通的变量,代码如下所示:
library(dplyr)
library(tidyr)
mtcars <- mtcars %>%
rownames_to_column(var = "model")
这里用到了 rownames_to_column()
函数,作用是将 DataFrame 的行名转化成一列叫做 model
的变量,代码片段返回的结果如下:
| | model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |-----|----------------|------|-----|------|------|------|-------|------|----|----|------|------| |1 | Mazda RX4 | 21.0 | 6 | 160.0| 110 | 3.90 | 2.620 | 16.46| 0 | 1 | 4 | 4 | |2 | Mazda RX4 Wag | 21.0 | 6 | 160.0| 110 | 3.90 | 2.875 | 17.02| 0 | 1 | 4 | 4 | |3 | Datsun 710 | 22.8 | 4 | 108.0| 93 | 3.85 | 2.320 | 18.61| 1 | 1 | 4 | 1 | |4 | Hornet 4 Drive | 21.4 | 6 | 258.0| 110 | 3.08 | 3.215 | 19.44| 1 | 0 | 3 | 1 | |5 | Hornet Sportabout| 18.7| 8 | 360.0| 175 | 3.15 | 3.440 | 17.02| 0 | 0 | 3 | 2 |
接下来,我们将 gather()
函数应用到 mtcars
:
gather(mtcars, key = "variable", value = "value", -model)
其中,key
指定了转化后的变量名,value
指定了变量取值的名称,-model
表示我们将除了 model
(即行名)以外的所有列都要转化为一列。
代码片段返回的结果如下:
| | model | variable | value | |---|-----------------|----------|----------| | 1 | Mazda RX4 | mpg | 21.00000 | | 2 | Mazda RX4 Wag | mpg | 21.00000 | | 3 | Datsun 710 | mpg | 22.80000 | | 4 | Hornet 4 Drive | mpg | 21.40000 | | 5 | Hornet Sportabout| mpg | 18.70000 | | ... | ... | ... | ... |
以上就是在 R 编程语言中将行名变成列的方法,使用 gather()
函数操作简单、便于理解、代码清晰可读。