2010-03-03 65 views
37

假設我在R中有一個列表或數據框,並且我想要獲取行索引,那麼我該怎麼做?也就是說,我想知道某個矩陣包含多少行。如何獲取R中的行索引號?

+1

這個問題還是很不清楚的。 – reinierpost 2011-12-14 13:19:17

+1

我認爲這是因爲它有兩個問題:第二句是@BenBolker回答'nrow(x)'(即給出數據框的*維*)。第一句話是關於獲取行號,謝恩回答(並且naught1改進)'as.integer(rownames(x))' – 2013-11-07 19:43:36

回答

10

這不太清楚你到底想要做什麼。

要引用一個數據幀連續使用df[row,]

要得到的東西使用match(item,vector),其中向量可能是你的數據幀的一列,如df$cname如果列向量的第一位置名字是cname。

編輯:

要結合這些你可以這樣寫:

df[match(item,df$cname),]

注意,比賽讓你列表中的第一個項目,所以如果你是不是在找一個唯一的參考號,你可能想考慮別的。

+1

這是一個很好的答案,而不是我相信@ lebesgue的另一個自我提出的問題。如果您鍵入'head(df)',則除了行ID以外的所有列都會有標題。所以我認爲@lebesgue正在尋找一個允許訪問行ID的函數('row'函數)。 – isomorphismes 2012-03-05 04:39:05

56

我解釋你的問題是關於獲取行號。

  • 如果您還沒有設置rownames,您可以嘗試as.numeric(rownames(df))。否則使用1:nrow(df)的序列。
  • which()函數將TRUE/FALSE行索引轉換爲行號。
+3

這也是我所做的,因爲DF行的名字,即使它們是數字的,也不一定對應於行索引:'row(cars [34:50,])[,1]; as.integer(rownames(汽車[34:50,]))'。你爲什麼在這裏使用'as.numeric()'?使用'as.integer()'會更有意義嗎? – naught101 2012-08-16 04:51:09

2

如果我明白你的問題,你只是希望能夠通過行可在數據幀的項目(或清單)

x = matrix(ceiling(9*runif(20)), nrow=5 ) 
colnames(x) = c("col1", "col2", "col3", "col4") 
df = data.frame(x)  # create a small data frame 

df[1,]     # get the first row 
df[3,]     # get the third row 
df[nrow(df),]   # get the last row 

lf = as.list(df)   

lf[[1]]     # get first row 
lf[[3]]     # get third row 

8

row?base::row。這給出了任何類矩陣對象的行索引。