【发布时间】:2020-10-27 22:43:32
【问题描述】:
我正在努力在数据框的多个列中应用我的函数。我有以下公式
test <- function(y, x, data) {
best.score <- min(data[data$income == y, ][[x]], na.rm=T)
(max(data[[x]], na.rm = TRUE)- data[[x]])/ (max(data[[x]], na.rm= TRUE) - best.score)
}
#When I apply it to one column for a data frame like this, it works and gives me a data frame with the values I need
result= data.frame(test( y= "middle income", x="risk", data = sub))
公式的作用是创建一个相对分数:
relative_socore1=(表现最佳的国家/地区得分(总体)] - 国家/地区得分 (x))/ 表现最好的国家得分(总体)] -(每组国家的最高得分(例如,仅针对“中等收入”组))
我想将此公式应用于我的数据框中的许多列,并创建一个仅包含分数结果的新数据框。我尝试了以下方法:
integrated_score <- sub %>%
mutate_each(is.double, test1(y= "middle income", data = sub))
#但我得到“错误:参数“x”丢失,没有默认值”,但我的 x 应该是数据框中的列
I also tried this:
integrated_score <- sub %>%
mutate_if(is.numeric, funs(test1(data= sub, y="middle income")))
#and this
vars <- (names(sub)[6:30])
vars <- setNames(vars, paste0(vars, "_test"))
tdata <- sub %>%
mutate_each_(funs(test1(data= sub, y="middle income")), vars)
但我一直得到相同的结果“错误:缺少参数“x”,没有默认值”。知道如何将此函数应用于我的数据框的多列或如何指定 x 假设为我的数据框中的数字列。
My data structure is like this
sub <- data.frame(country= c("blue", "green", "red", "pink", "grey", "black", "rose", "darkblue", "golden", "silver") , group = c("low income","middle income", "middle income", "middle income", "high income", "middle income", "high income", "middle income", "middle income", "low income" ), risk = c(18, 22, 21, 22, 45, 18, 22, 21, 22, 45), earthquakes= c(10, 20, 21, 92, 40, 18, 20, 21, 20, 45), floods = c(10, 20, 30, 40, 50, 60, 70, 80, 95, 95))
【问题讨论】: