我的for循环有什么问题-gsub行名

我的for循环有什么问题-gsub行名,r,for-loop,dataframe,gsub,rowname,R,For Loop,Dataframe,Gsub,Rowname,我想迭代所有行并重命名它们。基本上,我只想删除数据帧中的一些单词(每个行名称中都有相同的模式) 代码: for(行名中的i(df)){ row.names(df)[i]您的顺序不好: 这里,行名中的i(df)依次是您的每个行名: for (i in rownames(mtcars)) { + print(i) + } [1] "Mazda RX4" [1] "Mazda RX4 Wag" [1] "Datsun 710" ... 所以row.names(df)[i]正在尝试执行row.na

我想迭代所有行并重命名它们。基本上,我只想删除数据帧中的一些单词(每个行名称中都有相同的模式)

代码:

for(行名中的i(df)){

row.names(df)[i]您的顺序不好:

这里,行名中的i(df)依次是您的每个行名:

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”]
即:
row.names(mtcars)[“Mazda RX4”]
返回NA

您编写代码的方式,
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" 
数据(“mtcars”)
行名(mtcars)
[1] “马自达RX4”“马自达RX4 Wag”
[3] “Datsun 710”“大黄蜂4路”
[5] “大黄蜂”关于“勇敢”
[7] “喷粉机360”“美塞240D”
[9] “Merc 230”“Merc 280”
[11] “Merc 280C”“Merc 450SE”
[13] “Merc 450SL”“Merc 450SLC”
[15] “卡迪拉克弗利特伍德”“林肯大陆”
对于(沿(行名称(mtcars))的序列中的i){

row.names(mtcars)[[i]]不需要循环。请尝试
gsub(粘贴(words_to_remove,collapse='|'),'',rownames(df))
如果只需要删除由单词字符组成的子字符串,更安全的方法是使用
rownames(df)
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"