2013-07-18 51 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

這很有道理。 –