我对for循环有些新意,尽管阅读了很多帖子和教程,但无法让我的代码正常工作。我想编写一个循环,在列中搜索特定值并返回风险描述,然后将其作为新行添加到原始数据框中。
以下是一个示例数据框:
Repeat<-c("First","Second","Second","First","Second","Second")
Risk<-c(50,20,70,40,80,20)
df1<-data.frame(Repeat,Risk)
如果Risk列包含值88,55或50,我需要循环返回“HR”。如果risk列包含值80或20和70,则循环需要返回“MR”。如果上述条件均不为TRUE,则循环应返回“LR”。我已经坚持了一段时间,真的很感激帮助。谢谢。
my_vector = c()
for (i in df1$Risk){
if (i %% 50)
next
my_vector[length(my_vector)+1] = "HR"
}
new_row<-c("Result",my_vector)
final<-rbind(df1,new_row)
Repeat<-c("First","Second","Second","First","Second","Second")
Risk<-c(00,20,70,40,80,20)
df2<-data.frame(Repeat,Risk)
Repeat<-c("First","Second","Second","First","Second","Second")
Risk<-c(00,20,00,40,20,20)
df3<-data.frame(Repeat,Risk)
答案 0 :(得分:0)
Repeat<-c("First","Second","Second","First","Second","Second")
Risk<-c(50,20,70,40,80,20)
df1<-data.frame(Repeat,Risk)
library(dplyr)
df1 %>%
mutate(Return = ifelse((risk == 88 |risk == 55 |risk ==50), "HR", "LR"))
试试这个,如果不行,我会稍后再回来修改。
答案 1 :(得分:0)
这是使用布尔值之和的粗略且准备好的矢量化方法。测试你的人力资源小组是否在矢量中;测试是否满足MR组的任何一个标准;测试两项测试是否均为阳性。这将显示MR或HR是否存在,如df1
中所示。
evalRisk <- function(x) {
my_vector = c()
testHR <- sum(c(88,55,50) %in% x)
testMR <- sum(80 %in% x | sum(20 %in% Risk & 70 %in% Risk))
if (testHR) {
my_vector[length(my_vector)+1] = "HR"
}
if (testMR) {
my_vector[length(my_vector)+1] = "MR"
}
if (!sum(testHR,testMR)) {
my_vector[length(my_vector)+1] = "LR"
}
return(my_vector)
}
print(evalRisk(df1$Risk))
[1] "HR" "MR"
print(evalRisk(df2$Risk))
[1] "MR"
print(evalRisk(df3$Risk))
[1] "LR"