对R非常陌生,我正在尝试根据不同的条件创建一个变量'Accuracy‘:
如果第一行是Image2,并且从第2到40行选择了Image2,则分配1。如果第一行是image2,并且从第42到80行选择了Image1,则分配1。如果第一行是Image1,并且从第2到40行选择了image1,则分配1。如果第一行是image1,并且从第42到80行选择了image2,则分配1
如果所有这些都不满足,则分配0。
前两个语句运行良好,但后两个不能,任何建议都将不胜感激
data1$Accuracy <- ifelse(data1$Correct_image[1] == "Image2" & between(data1$Trial_number, 2, 40) & data1$Image_selected == "image2", 1,
ifelse(data1$Correct_image[1] == "Image2" & between(data1$Trial_number, 42, 80) & data1$Image_selected == "image1", 1,
ifelse(data1$Correct_image[1] == "Image1" & between(data1$Trial_number, 2, 40) & data1$Image_selected == "image1", 1,
ifelse(data1$Correct_image[1] == "Image1" & between(data1$Trial_number, 42, 80) & data1$Image_selected == "image2", 1, 0))))发布于 2021-05-15 10:19:54
正如@yang-wu建议的那样,dplyr的case_when非常适合这种情况。
library(dplyr)
data1 %>%
mutate(Accuracy = case_when(
Correct_image == "Image2" & between(Trial_number, 2, 40) & Image_selected == "image2" ~ 1,
Correct_image == "Image2" & between(Trial_number, 42, 80) & Image_selected == "image1" ~ 1,
Correct_image == "Image1" & between(Trial_number, 2, 40) & Image_selected == "image1" ~ 1,
Correct_image == "Image1" & between(Trial_number, 42, 80) & Image_selected == "image2" ~ 1,
TRUE ~ 0))))
))https://stackoverflow.com/questions/67542137
复制相似问题