使用R中的逻辑函数,将循环替换为apply系列函数(或dplyr)
我创建了这个具有代表性的数据框,它使用for循环指定条件类别使用R中的逻辑函数,将循环替换为apply系列函数(或dplyr),r,loops,for-loop,dplyr,apply,R,Loops,For Loop,Dplyr,Apply,我创建了这个具有代表性的数据框,它使用for循环指定条件类别 df <- data.frame(Date=c("08/29/2011", "08/29/2011", "08/30/2011", "08/30/2011", "08/30/2011", "08/29/2012", "08/29/2012", "01/15/2012", "08/29/2012"), Time=c("09:45", "10:00", "13:00", "13:30", "10:14",
df <- data.frame(Date=c("08/29/2011", "08/29/2011", "08/30/2011", "08/30/2011", "08/30/2011", "08/29/2012", "08/29/2012", "01/15/2012", "08/29/2012"),
Time=c("09:45", "10:00", "13:00", "13:30", "10:14", "9:09", "11:23", "17:06", "12:20"),
Diff = c(0.2,4.3,6.5,15.0, 16.5, 31, 30.2, 21.9, 1.9))
df1<- df %>%
mutate(Accuracy=ifelse(Diff<=3, "Excellent", "TBD"))
for(i in 1:nrow(df1)){
if(df1$Diff[i]>3&&df1$Diff[i]<=10){
df1$Accuracy[i]<-"Good"}
if(df1$Diff[i]>10&&df1$Diff[i]<=15){
df1$Accuracy[i]<-"Fair"}
if(df1$Diff[i]>15&&df1$Diff[i]<=30){
df1$Accuracy[i]<-"Poor"}
if(df1$Diff[i]>30){
df1$Accuracy[i]<-"Unacceptable"}
}
df您可以在dplyr
中使用case\u:
df1<- df %>%
mutate(Accuracy= case_when(
.$Diff <= 3 ~ "Excellent",
.$Diff <= 10 ~ "Good",
.$Diff <= 15 ~ "Fair",
.$Diff <= 30 ~ "Poor",
.$Diff > 30 ~ "Unpublishable",
TRUE ~"TBD")
)
df1
Date Time Diff Accuracy
1 08/29/2011 09:45 0.2 Excellent
2 08/29/2011 10:00 4.3 Good
3 08/30/2011 13:00 6.5 Good
4 08/30/2011 13:30 15.0 Fair
5 08/30/2011 10:14 16.5 Poor
6 08/29/2012 9:09 31.0 Unpublishable
7 08/29/2012 11:23 30.2 Unpublishable
8 01/15/2012 17:06 21.9 Poor
9 08/29/2012 12:20 1.9 Excellent
df1%
变异(准确度=情况)(
.$Diff您的量表有一个错误,它从“一般”
到“良好”
再到“不可发布”
。我将“良好”
-值替换为“差”
。
mutate(Accuracy=ifelse(pDiff<=3, "Excellent",
ifelse(pDiff>3&pDiff<=10, "Good",
ifelse(pDiff>10&pDiff<=15, "Fair",
ifelse(pDiff>15&pDiff<30, "Poor",
ifelse(Diff>30, "Unpublishable", "TBD"))))))
df1<- df %>%
mutate(Accuracy= case_when(
.$Diff <= 3 ~ "Excellent",
.$Diff <= 10 ~ "Good",
.$Diff <= 15 ~ "Fair",
.$Diff <= 30 ~ "Poor",
.$Diff > 30 ~ "Unpublishable",
TRUE ~"TBD")
)
df1
Date Time Diff Accuracy
1 08/29/2011 09:45 0.2 Excellent
2 08/29/2011 10:00 4.3 Good
3 08/30/2011 13:00 6.5 Good
4 08/30/2011 13:30 15.0 Fair
5 08/30/2011 10:14 16.5 Poor
6 08/29/2012 9:09 31.0 Unpublishable
7 08/29/2012 11:23 30.2 Unpublishable
8 01/15/2012 17:06 21.9 Poor
9 08/29/2012 12:20 1.9 Excellent