あなたの順序は良くありません。ここで
、私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"
必要はありません。 – Sotos
単語の文字列のみを削除する必要がある部分文字列であれば、より安全な方法は 'rownames(df) 'を使うことです。これは、' gsub(paste(words_to_remove、collapse =' | ')'、rownames(df) < - gsub(paste0( "\\ b(?:"、paste(words_to_remove、collapse = '|') ")\\ b")、 ''、rownames(df)) ' –