r语言 - 如何根据列中的信息重命名行名的子集?



我正在尝试找到一个代码,该代码允许我更改根据列中的条件选择的行名子集。作为使用 mtcars 数据集的示例,我想在所有满足"df$gear values == 4"的行名中在 (_1) 后面添加一个字符,并将行名保留为不满足的行名。

df <- mtcars
head(df)

我已经尝试了以下方法将_1粘贴到所有行名中。

rownames(df) <- paste0(rownames(df), "_1")

我知道您可以执行以下操作来更改单个行名。

rownames(df)[rownames(df) == "Merc 280"] <- "Some Mercedes"

我试图玩弄这些代码来做上面描述的事情,并想出了下面。

rownames(df)[df$gear == "4"] <- paste(rownames(df), "_1")

但是此代码抛出一个错误 - "要替换的项目数不是替换长度的倍数"。我理解错误消息,但我不确定是否有替代代码可以使其工作。

我将不胜感激任何反馈、评论或想法。

谢谢 凯茜

您收到错误"要替换的项目数不是替换长度的倍数",因为您子集了 12 个行名(gear == 4),但您想为其分配 32 个行名 (paste(rownames(df), "_1"))。诀窍是还要对要更改的行名进行子集化,因为您只想更改属于条件gear == 4为真的行的行名。

试试这个:

df <- mtcars
rownames(df)[df$gear == 4] <- paste0(rownames(df)[df$gear == 4], "_1")
rownames(df)
[1] "Mazda RX4_1"         "Mazda RX4 Wag_1"     "Datsun 710_1"        "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
[7] "Duster 360"          "Merc 240D_1"         "Merc 230_1"          "Merc 280_1"          "Merc 280C_1"         "Merc 450SE"         
[13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood"  "Lincoln Continental" "Chrysler Imperial"   "Fiat 128_1"         
[19] "Honda Civic_1"       "Toyota Corolla_1"    "Toyota Corona"       "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
[25] "Pontiac Firebird"    "Fiat X1-9_1"         "Porsche 914-2"       "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
[31] "Maserati Bora"       "Volvo 142E_1"

请注意:一般来说,为行名提供自己的列会更好一些,因为这样您就可以使用相同的语法来访问它们,就像用于其他列一样。

最新更新