2017-10-02 3 views
0

すべての行を繰り返して名前を変更したい。基本的には、データフレーム内のいくつかの単語(すべての行の名前と同じパターン)を削除したいだけです。forループで何が問題になっていますか? -gsub rownames

コード:

for (i in rownames(df)) { 

    row.names(df)[i] <- gsub("*The words I want to remove*", "", row.names(df)[i]) 
} 

私は次のエラーを取得:コードがループの罰金外を動作することを

Error in row.names<-.data.frame (*tmp* , value = c("The words I want to remove", : invalid 'row.names' length

注意を。

+0

必要はありません。 – Sotos

+0

単語の文字列のみを削除する必要がある部分文字列であれば、より安全な方法は 'rownames(df) 'を使うことです。これは、' gsub(paste(words_to_remove、collapse =' | ')'、rownames(df) < - gsub(paste0( "\\ b(?:"、paste(words_to_remove、collapse = '|') ")\\ b")、 ''、rownames(df)) ' –

答えて

1

あなたの順序は良くありません。ここで

、私rownames中(DF)を順次ごrown名のそれぞれである:

for (i in rownames(mtcars)) { 
+ print(i) 
+ } 
[1] "Mazda RX4" 
[1] "Mazda RX4 Wag" 
[1] "Datsun 710" 
... 

のでrow.names(df)[i]row.names(df)["yourrowname"]すなわちをやろうとしている:NA戻るrow.names(mtcars)["Mazda RX4"]

あなたのコードを書いた方法、iは数字でなければなりません。したがって:

for (i in seq_along(rownames(df))) { 
    print(i) 
} 
[1] 1 
[1] 2 
[1] 3 
[1] 4 
[1] 5 
[1] 6 
[1] 7 
... 

ここで、行名を置き換えるには、iを二重にする必要があります。ここでmtcarsとの例を示します。

data("mtcars") 
rownames(mtcars) 
[1] "Mazda RX4"   "Mazda RX4 Wag"  
[3] "Datsun 710"   "Hornet 4 Drive"  
[5] "Hornet Sportabout" "Valiant"    
[7] "Duster 360"   "Merc 240D"   
[9] "Merc 230"   "Merc 280"   
[11] "Merc 280C"   "Merc 450SE"   
[13] "Merc 450SL"   "Merc 450SLC"   
[15] "Cadillac Fleetwood" "Lincoln Continental" 

for (i in seq_along(rownames(mtcars))) { 

    row.names(mtcars)[[i]] <- gsub(" ", "_", row.names(mtcars)[[i]]) 
} 
rownames(mtcars) 

[1] "Mazda_RX4"   "Mazda_RX4_Wag"  
[3] "Datsun_710"   "Hornet_4_Drive"  
[5] "Hornet_Sportabout" "Valiant"    
[7] "Duster_360"   "Merc_240D"   
[9] "Merc_230"   "Merc_280"   
[11] "Merc_280C"   "Merc_450SE"   
[13] "Merc_450SL"   "Merc_450SLC" 

しかし、コメントで述べたように、あなたはここでループのための必要はありません。ループの

rownames(mtcars) <- gsub(" ", "_", row.names(mtcars)) 
rownames(mtcars) 
[1] "Mazda_RX4"   "Mazda_RX4_Wag"  
[3] "Datsun_710"   "Hornet_4_Drive"  
[5] "Hornet_Sportabout" "Valiant"    
[7] "Duster_360"   "Merc_240D"   
[9] "Merc_230"   "Merc_280"   
[11] "Merc_280C"   "Merc_450SE"   
[13] "Merc_450SL"   "Merc_450SLC" 
関連する問題