2013-07-18 55 views
12

如何引用观察行号?例如,如果您有一个名为“数据”的data.frame,并且想要创建一个与每个观察行号相等的变量data$rownumber,那么您如何在不使用循环的情况下做到这一点?参考R中的行号

回答

19

这些都是默认存在的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 

您可以通过rownames命令访问它们。

R> rownames(df) 
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" 

如果你需要他们的号码,只需加入as.numeric,如as.numeric(rownames(df))强制为数字。

你并不需要添加它们,因为如果你知道你在找什么(比如项目df$c == 'i',您可以使用该命令:

R> which(df$c =='i') 
[1] 9 

,或者如果你不知道列

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

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

如果你想添加它们,你可以使用df$rownumber <- as.numeric(rownames(df)),虽然这可能不如df$rownumber <- 1:nrow(df)稳健,因为有些情况下您可能已将其分配到rownames,因此它们将不再是默认索引编号(即使您将其分配给rownames,该命令也将继续返回索引编号)。

1

这可能是最简单的方法:

data$rownumber = 1:dim(data)[1] 

这也许值得一提的是,如果你想通过其行索引选择一排,你可以用简单的括号来做到这一点

data[3,] 

vs. 

data[data$rownumber==3,] 

所以我不确定这个新专栏是如何实现的。

+3

您可以使用'nrow(data)'而不是'dim(data)[1]'。 –

+2

rownames是不是数字的字符。这可能会导致混淆。 – Roland

+0

@Roland好点,删除替代解决方案。 –

6

简单:

data$rownumber = 1:nrow(Data) 
+0

我想不出什么时候这会很有用。尤其是考虑到函数'which' –

+1

如果你需要一个排序索引,这很有用。 – Roland

+0

这很有道理。 –