引用R中的行号

Mic*_*ael 16 row r

如何参考观察的行号?例如,如果您有一个data.frame名为"数据"并且想要创建一个data$rownumber等于每个观察的行号的变量,那么如果不使用循环,您将如何进行?

ric*_*rdo 21

默认情况下,这些rownames在您创建时存在data.frame.

R> df = data.frame('a' = rnorm(10), 'b' = runif(10), 'c' = letters[1:10])
R> df
            a          b c
1   0.3336944 0.39746731 a
2  -0.2334404 0.12242856 b
3   1.4886706 0.07984085 c
4  -1.4853724 0.83163342 d
5   0.7291344 0.10981827 e
6   0.1786753 0.47401690 f
7  -0.9173701 0.73992239 g
8   0.7805941 0.91925413 h
9   0.2469860 0.87979229 i
10  1.2810961 0.53289335 j
Run Code Online (Sandbox Code Playgroud)

并且您可以通过rownames命令访问它们.

R> rownames(df)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
Run Code Online (Sandbox Code Playgroud)

如果你需要它们作为数字,只需通过添加强制数字as.numeric,如as.numeric(rownames(df)).

你不需要添加它们,就好像你知道你在寻找什么(比如项目df$c == 'i',你可以使用which命令:

R> which(df$c =='i')
[1] 9
Run Code Online (Sandbox Code Playgroud)

或者如果您不知道该列

R> which(df == 'i', arr.ind=T)
     row col
[1,]   9   3
Run Code Online (Sandbox Code Playgroud)

您可以使用df[9, 'c']或访问元素df$c[9].

如果你想添加它们你可以使用df$rownumber <- as.numeric(rownames(df)),虽然这可能不如df$rownumber <- 1:nrow(df)你可能已经分配的情况那样强大,rownames所以它们将不再是默认索引号(即使你,哪个命令将继续返回索引号做分配rownames).


Señ*_*r O 8

只是:

data$rownumber = 1:nrow(Data)
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要排序索引,这将很有用。 (2认同)

Kir*_*irk 6

也许对于数据框,最简单、最实用的解决方案之一是:

data = dplyr::mutate(data, rownum=row_number())
Run Code Online (Sandbox Code Playgroud)