使用函数更改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