如何将R数据帧的行索引号或行索引名转换为向量?

如果将行索引错误地设置为行索引,我们可能希望提取行索引而不管其类型(数字还是字符串)进行一些计算。它发生在数据收集过程中或对数据的不正确处理期间。另外,由于行索引对于访问行很有帮助,因此我们必须为其使用适当的名称,而不要使用可能引起混淆的值。例如,如果数据帧的行索引为43、94等,则可能会造成混淆。因此,如果需要,我们应该将行索引转换为向量或列。

示例

考虑下面的数据帧(这里,我们使用简单的数字序列)-

> set.seed(1)
> x1<-rnorm(20,0.01)
> x2<-rpois(20,2)
> x3<-runif(20,2,5)
> df<-data.frame(x1,x2,x3)
> df
    x1 x2           x3
1  -0.616453811 3 4.738628
2   0.193643324 2 2.880810
3  -0.825628612 3 3.377197
4   1.605280802 2 2.997184
5   0.339507772 2 3.952611
6  -0.810468384 3 2.774050
7   0.497429052 0 3.435636
8   0.748324705 2 4.298932
9   0.585781352 3 2.252741
10 -0.295388387 3 4.625964
11  1.521781168 2 3.017219
12  0.399843236 4 4.518321
13 -0.611240581 2 3.040050
14 -2.204699887 1 3.001325
15  1.134930918 0 3.429054
16 -0.034933609 0 4.676595
17 -0.006190263 1 4.593018
18  0.953836211 2 3.169969
19  0.831221195 2 4.331962
20  0.603901321 2 4.881854

将行索引号转换为向量-

> Numeric_Vector_of_row_names<-as.numeric(rownames(df))
> Numeric_Vector_of_row_names
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> is.vector(Numeric_Vector_of_row_names)
[1] TRUE

现在假设行索引不是数字,如下所示:

> rownames(df)<-LETTERS[1:20]
> df
    x1 x2        x3
A -0.616453811 3 4.738628
B  0.193643324 2 2.880810
C -0.825628612 3 3.377197
D  1.605280802 2 2.997184
E  0.339507772 2 3.952611
F -0.810468384 3 2.774050
G  0.497429052 0 3.435636
H  0.748324705 2 4.298932
I  0.585781352 3 2.252741
J -0.295388387 3 4.625964
K  1.521781168 2 3.017219
L  0.399843236 4 4.518321
M -0.611240581 2 3.040050
N -2.204699887 1 3.001325
O  1.134930918 0 3.429054
P -0.034933609 0 4.676595
Q -0.006190263 1 4.593018
R  0.953836211 2 3.169969
S  0.831221195 2 4.331962
T  0.603901321 2 4.881854

这些行索引可以转换为向量,如下所示-

> Row_names_String<-rownames(df)
> Row_names_String
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
[20] "T"
> is.vector(Row_names_String)
[1] TRUE