簡體   English   中英

R - 從數據框中選擇行時如何防止row.names

[英]R - how to prevent row.names when selecting rows from a data frame

假設我創建了一個數據幀(只是為了保持簡單):

testframe <- data.frame( a = c(1,2,3,4), b = c(5,6,7,8))

因此,我有兩個變量(列)和四個案例(行)。

如果我選擇一些BEGINNING WITH FIRST行的行,我會得到某種數據幀的子集,例如:

testframe2 <- testframe[1:2,] #selecting the first two rows

但是,如果我做了同樣的行而不是從第一行開始,我得到另一列包含原始數據幀的行號。

testframe3 <- testframe[3:4,] #selecting the last two rows

導致:

  a b
3 3 7
4 4 8

我該怎么做才能首先阻止新的row.names變量? 我知道我之后可以刪除它但也許從一開始就可以避免它。

謝謝你的幫助!

它復制原始數據集中的row.names 只需使用rownames<-重命名行rownames<-就像這樣......

rownames( testframe3 ) <- seq_len( nrow( testframe3 ) )
#   a b
# 1 3 7
# 2 4 8

編程seq_len( nrow( x ) )最好說1:nrow( x )因為看起來,你選擇一個邊緣的情況下會發生什么data.frame的零行...

df <- testframe[0,]
# [1] a b
# <0 rows> (or 0-length row.names)
rownames(df) <- seq_len( nrow( df ) ) #  No error thrown - returns a length 0 vector of rownames

#  But...
rownames(df) <- 1:nrow( df )
# Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
#   invalid 'row.names' length

#  Because...
1:nrow( df )
# [1] 1 0

或者你可以通過在調用data.frame的過程中包裝子集來data.frame這一點,但是如果你想以編程方式派生行數(因為你將需要子集兩次),這實在是效率很低,我不推薦它rownames<-方法:

data.frame( testframe[3:4,] , row.names = 1:2 )
#  a b
#1 3 7
#2 4 8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM