【发布时间】:2020-10-27 15:05:29
【问题描述】:
我正在尝试为 values 相对于 scorecard(以下两者)创建记分卡。
values <- data.frame(A= c(-200,-150,-100,0,100),
B= c(100,0,-101,-201,-300),
C= c(-400,400,500,-500,250),
D= c(NA,NA,-1000,-1000,-1000),
E= c(1000,1000,1,-1000,-2000))
scorecard <- data.frame(Names = c("A","B","C","D","E"),
"Score5" = c(-100,-200,-300,-400,-500))
values
A B C D E
1 -200 100 -400 -1000 1000
2 -150 0 400 -1000 1000
3 -100 -101 500 -1000 1
4 0 -201 -500 -1000 -1000
5 100 -300 250 -1000 -2000
如果 A 的值 scorecard[1,2]),记分卡数据框应为 5,否则应为 0。我想对所有 A、B、C、D 和 E 执行此操作一个数据框。所需的输出是:
# A B C D E
#1 5 0 5 NA 0
#2 5 0 0 NA 0
#3 0 0 0 5 0
#4 0 5 5 5 5
#5 0 5 0 5 5
我尝试了以下方法 - 这需要打包的 xts:install.packages("xts"),但我并没有完全做到。
pointsfunction <- function(value) {
points <- c()
for(i in names) {
index = which(colnames(value)==i)
data_start <- which(!is.na(value))[1]
points[1:(data_start -1)] <- NA
for(a in (data_start):(length(value))) {
if(value[a] < scorecard[index, 2]) {
points[a] <- -5
} else {
points[a] <- 0
}
}
}
points <- reclass(points, value)
return(points)
}
scorecardpoints <- as.data.frame(lapply(values, pointsfunction))
我收到以下错误:
if (value[a]
有什么想法吗?
【问题讨论】:
-
您能否对所需的输出更清楚一点?显示示例输入的输出将有很大帮助。 “f A 的值 ”。它总是 5 还是 0?或者是低于记分卡阈值的
values的数量?结果是否应该与scorecard、values或其他内容具有相同的“形状”(尺寸)? -
感谢@GregorThomas。我已经编辑过了。您是否知道如何使用 lapply 解决它?