我在数据集中有一个以M, F or I
开头的列。我想用M
替换列中的所有F
或MF
,并保持I
不变。
data$Sex:
"M"
"F"
"I"
"F"
"M"
"I"
我已尝试过如下所示的代码段,但无济于事。:
df <- data$Sex
for(i in names(df)){
gsub("M","MF",df)
gsub("F","MF",df)
}
我是R的新手。任何帮助都将不胜感激。
答案 0 :(得分:1)
假设
sex
是"factor"
列在旧级别和新级别之间定义映射levs
,然后写下:
data <- data.frame(sex = c("M", "F", "I", "F", "M", "I")) # test input
现在尝试其中一种:
levs <- c(F = "MF", M = "MF", I = "I") # mapping
transform(data, sex = factor(levs[sex])) ##
levels(data$sex) <- levs # levs defined above
如果sex
是"character"
列,那么如果我们删除单词factor
,那么上面的第一个单词仍然可以正常工作:
data_c <- data.frame(sex = c("M", "F", "I", "F", "M", "I"), stringsAsFactors = FALSE)
transform(data_c, sex = replace(sex, sex %in% c("M", "F"), "MF"))
,如果省略单词factor
,标记为##的解决方案也有效。