R conditional for loop - 搜索数据帧中的值和值组合

时间:2018-04-11 16:29:49

标签: r for-loop if-statement dataframe rbind

我对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)

其他数据框

MR数据框

Repeat<-c("First","Second","Second","First","Second","Second")
Risk<-c(00,20,70,40,80,20)
df2<-data.frame(Repeat,Risk)

LR数据框

Repeat<-c("First","Second","Second","First","Second","Second")
Risk<-c(00,20,00,40,20,20)
df3<-data.frame(Repeat,Risk)

2 个答案:

答案 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"