[英]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.