R 使用调用变量名的函数清除数据
我正在尝试编写一个清理变量的函数,将“*”替换为“1”,将NAs替换为“0”。我可以用ifelse轻松做到这一点,但我希望它是干净的,并使用函数式编程,但我显然还没有做到这一点 一个示例数据库是:R 使用调用变量名的函数清除数据,r,function,variables,nse,R,Function,Variables,Nse,我正在尝试编写一个清理变量的函数,将“*”替换为“1”,将NAs替换为“0”。我可以用ifelse轻松做到这一点,但我希望它是干净的,并使用函数式编程,但我显然还没有做到这一点 一个示例数据库是: db <- data.frame( name = c("Abel", "Abner", "Bianca", "Pedro", "Lucas"), scholarship1 = c("*", "*", "*", "*", NA), scholarship2 = c("*", NA, N
db <- data.frame(
name = c("Abel", "Abner", "Bianca", "Pedro", "Lucas"),
scholarship1 = c("*", "*", "*", "*", NA),
scholarship2 = c("*", NA, NA, "*", "*"))
)
db由于示例函数是逐属性的,下面是一个工作示例:
db <- data.frame(
name = c("a", "b", "c", "d", "e"),
scholarship1 = c("*", "*", "*", "*", NA),
scholarship2 = c("*", NA, NA, "*", "*"))
dichotomizer <- function(database, variable) {
copy <- rep(0, nrow(database[variable]))
copy[which(database[variable] == "*")] = 1
database[variable] <- copy
return(database)
}
new_db <- dichotomizer(db, "scholarship1")
final_db <- dichotomizer(new_db, "scholarship2")
假设你在找这样的东西<代码>二分法器=函数(数据库,变量){database[,variable]=ifelse(is.na(database[,variable]),'0',ifelse(database[,variable]='*','1',database[,variable])database}
然后调用二分法器(db,'scholarship1')
我不知道你说的“使用函数式编程”是什么意思。你是说你想使用非标准评估(NSE)?你想如何调用你的函数?标准评估(SE)很容易(不需要eval
,替换,enquo
)如果您使用带引号的列名,例如,二分法(db,“scholarship1”)
。肖恩上面的评论显示了一个SE解决方案。未带引号的列名二分法(db,scholarship1)
需要NSE。此外,不要只说“不起作用”-描述它是如何工作的。如果出现错误,请发布错误消息。错误消息非常有用。如果没有出现错误但得到意外结果,请描述并解释错误原因。@SeanLin这对我的要求很有效!谢谢!@Gregor“函数式编程”部分是我认为我需要的…但我发现它不是必需的。我没有把错误信息放进去,因为我知道我的问题没有得到很好的解决,所以我选择忽略它。
db <- data.frame(
name = c("a", "b", "c", "d", "e"),
scholarship1 = c("*", "*", "*", "*", NA),
scholarship2 = c("*", NA, NA, "*", "*"))
dichotomizer <- function(database, variable) {
copy <- rep(0, nrow(database[variable]))
copy[which(database[variable] == "*")] = 1
database[variable] <- copy
return(database)
}
new_db <- dichotomizer(db, "scholarship1")
final_db <- dichotomizer(new_db, "scholarship2")