使用函数更改R中多个单元格的名称

使用函数更改R中多个单元格的名称,r,function,mapping,R,Function,Mapping,考虑以下数据框: df <- setNames(data.frame(1:5,rep(1,5)), c("id", "value")) 然后,我可以在我的数据上应用该函数,并指定它应该用于哪个列,它的工作方式与使用gsub的代码的工作方式相同: df <- df_mapping(df,id) df如果我们需要一个函数,那么可以有一个“data”参数、列名、要替换的值和替换值,然后创建逻辑条件,对列进行子集化,使用replace\u val赋

考虑以下数据框:

df <- setNames(data.frame(1:5,rep(1,5)), c("id", "value"))
然后,我可以在我的数据上应用该函数,并指定它应该用于哪个列,它的工作方式与使用
gsub的代码的工作方式相同:

df <- df_mapping(df,id)

df如果我们需要一个函数,那么可以有一个“data”参数、列名、要替换的值和替换值,然后创建逻辑条件,对列进行子集化,使用replace\u val赋值,并在赋值后返回数据集

f1 <- function(dat, colnm, values_to_replace, replacer_val) {
           dat[[colnm]][dat[[colnm]] %in% values_to_replace] <- replacer_val
         return(dat)
    }

f1(df, "id", c(2, 3), 1)

要使用相应的替换集替换值

f2 <- function(dat, colnm, values_to_replace, replacer_vals) {

          nm1 <- setNames(replacer_vals, values_to_replace)
          v1 <- nm1[as.character(dat[[colnm]])]
          i1 <- !is.na(v1)
          dat[[colnm]][i1] <- v1[i1]
        return(dat)
 

    }
     


f2(df, "id", c(2, 3), c(5, 6))
#  id value
#1  1     1
#2  5     1
#3  6     1
#4  4     1
#5  5     1

如果我们需要一个函数,那么可以有一个“数据”参数、列名、要替换的值和替换值,然后创建逻辑条件,对列进行子集化,使用替换值进行赋值,并在赋值后返回数据集

f1 <- function(dat, colnm, values_to_replace, replacer_val) {
           dat[[colnm]][dat[[colnm]] %in% values_to_replace] <- replacer_val
         return(dat)
    }

f1(df, "id", c(2, 3), 1)

要使用相应的替换集替换值

f2 <- function(dat, colnm, values_to_replace, replacer_vals) {

          nm1 <- setNames(replacer_vals, values_to_replace)
          v1 <- nm1[as.character(dat[[colnm]])]
          i1 <- !is.na(v1)
          dat[[colnm]][i1] <- v1[i1]
        return(dat)
 

    }
     


f2(df, "id", c(2, 3), c(5, 6))
#  id value
#1  1     1
#2  5     1
#3  6     1
#4  4     1
#5  5     1

也许像下面这样的
映射可以有所帮助

mapping <- function(df, id, to_replace, obj_value) {
  transform(df, id = replace(id, id %in% to_replace, obj_value))
}

也许像下面这样的
映射可以有所帮助

mapping <- function(df, id, to_replace, obj_value) {
  transform(df, id = replace(id, id %in% to_replace, obj_value))
}

您可以使用
dplyr
recode
功能

mapping <- function(data, col, old, new) {
  data[[col]] <- dplyr::recode(data[[col]], !!!setNames(new, old))
  data
}

mapping(df, "id", c(2, 3), c(7L, 8L))

#  id value
#1  1     1
#2  7     1
#3  8     1
#4  4     1
#5  5     1

映射您可以使用
dplyr
recode
功能

mapping <- function(data, col, old, new) {
  data[[col]] <- dplyr::recode(data[[col]], !!!setNames(new, old))
  data
}

mapping(df, "id", c(2, 3), c(7L, 8L))

#  id value
#1  1     1
#2  7     1
#3  8     1
#4  4     1
#5  5     1

映射您是对的。我已经改变了问题。然而,就我而言,我有很多名字需要更改。因此,我仍然需要一个函数,在这个函数中,我可以轻松定义应该更改的单元格。下面的函数是否有助于更改替换值?i、 假设你想用1替换2,用5替换4?嗯。我有很多单元格需要更改。例如,一些值应该是X,而其他值应该是Y,等等(例如,考虑所有4个都应该改变为3)。因此,如果我可以使用类似于df_映射函数的功能,在这里我可以指定哪些单元格应该更改,然后我可以将其应用到我的df上,这将更加方便。我已经更改了问题。但除此之外,f3适合我。非常感谢您的帮助。:-)你是对的。我已经改变了问题。然而,就我而言,我有很多名字需要更改。因此,我仍然需要一个函数,在这个函数中,我可以轻松定义应该更改的单元格。下面的函数是否有助于更改替换值?i、 假设你想用1替换2,用5替换4?嗯。我有很多单元格需要更改。例如,一些值应该是X,而其他值应该是Y,等等(例如,考虑所有4个都应该改变为3)。因此,如果我可以使用类似于df_映射函数的功能,在这里我可以指定哪些单元格应该更改,然后我可以将其应用到我的df上,这将更加方便。我已经更改了问题。但除此之外,f3适合我。非常感谢您的帮助。:-)
> mapping(df, id, c(2, 3), 1)
  id value
1  1     1
2  1     1
3  1     1
4  4     1
5  5     1
mapping <- function(data, col, old, new) {
  data[[col]] <- dplyr::recode(data[[col]], !!!setNames(new, old))
  data
}

mapping(df, "id", c(2, 3), c(7L, 8L))

#  id value
#1  1     1
#2  7     1
#3  8     1
#4  4     1
#5  5     1