在R中查找和替换多个项目

在R中查找和替换多个项目,r,R,作为R的新手,我必须一次只写一行我所有的查找和替换语句(见下面的代码) 是否可以以更简洁的方式(即仅一行)执行此操作 YP$gender如果只有两个替换使用“ifelse”: YP$gender <- ifelse(as.character(YP$gender) == "Female", "F", "M") YP$gender您可以使用“%in%”进行倍数比较,而不是“==” replace(as.character(YP$gender), YP$gender %in% c("Male

作为R的新手,我必须一次只写一行我所有的查找和替换语句(见下面的代码) 是否可以以更简洁的方式(即仅一行)执行此操作


YP$gender如果只有两个替换使用“ifelse”:

YP$gender <- ifelse(as.character(YP$gender) == "Female", "F", "M") 

YP$gender您可以使用“%in%”进行倍数比较,而不是“==”

replace(as.character(YP$gender), YP$gender %in% c("Male","Female"), c("M", "F"))   
编辑:很抱歉,这段代码不能像我想象的那样工作

但是你可以用循环来解决它

YP = c("a","b","b","a","c")

keys = c("a", "b", "c")
rep_value = c("A", "B", "C")

for(index in 1:length(keys) ) {
  sub_key = keys[index]
  sub_rep_value = rep_value[index]

  value_index = which(YP %in% sub_key)
  YP[value_index] = sub_rep_value
}

取决于你有多少目标和替代品。如果您有很多,那么最简单的方法可能是创建一个包含两列的合并文件,一列包含目标,另一列包含与唯一元素一样多的行的替换。如果该合并文件被称为
df
,则代码将类似于:

library(dplyr)
YP <- YP %>%
  merge(df, by = "gender", all.x = T)

看起来您有factor列,所以我们只需要更改标签,如下所示:

YP$gender <- factor(YP$gender, labels = c("F", "M"))

YP$gender阅读有关因子、ifelse和开关的信息。什么样的向量是
YP$gender
class(YP$gender)
attributes(YP$gender)
返回什么?我们需要另一个ifelse来检查它是否是M。。。否则,这也会将X重新编码为M。嗨,我恐怕我发布了一个不好的示例,因为我有几个案例,其中我有两个以上的替换。我对此也做了回答:)或
substr(YP$SEXT,1,1)
library(dplyr)
YP <- YP %>%
  merge(df, by = "gender", all.x = T)
library(dplyr)
YP %>%
  mutate(gender = case_when(
    gender == "Female" ~ "F",
    gender == "Male"   ~ "M,
    TRUE               ~ gender
  ))
YP$gender <- factor(YP$gender, labels = c("F", "M"))
x <- factor(c("Female", "Male", "Female"))
x
# [1] Female Male   Female
# Levels: Female Male

#Check the levels
levels(x)
# [1] "Female" "Male"  

# relabel
x <- factor(x, labels = c("F", "M"))
# [1] F M F
# Levels: F M
levels(x)
# [1] "F" "M"