我正在尝试找到一个代码,该代码允许我更改根据列中的条件选择的行名子集。作为使用 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"
请注意:一般来说,为行名提供自己的列会更好一些,因为这样您就可以使用相同的语法来访问它们,就像用于其他列一样。