a data.table approach
sample data
library( data.table )
DT <- fread("subject      day1      day2      day3      day4      day5      day6      day7
       A positive  positive  positive  positive  positive  positive  positive 
       B positive  positive   negative positive   negative  negative  negative
       C positive  positive  positive   negative  negative positive  positive 
       D positive  positive  positive   negative  negative  negative  negative")
method 1. create marker column for pos-after-neg
#melt to long format
DT.long <- melt( DT, "subject" )
#get pos-after-neg by subject, create marker-column
DT.long[ DT.long[, .I[ value == "positive" & shift( value, fill = "positive", type = "lag" ) == "negative" ], by = subject ]$V1, marker := 1]
#     subject variable    value marker
#  1:       A     day1 positive     NA
#  2:       B     day1 positive     NA
#  3:       C     day1 positive     NA
#  4:       D     day1 positive     NA
#  5:       A     day2 positive     NA
#  6:       B     day2 positive     NA
#  7:       C     day2 positive     NA
#  8:       D     day2 positive     NA
#  9:       A     day3 positive     NA
# 10:       B     day3 negative     NA
# 11:       C     day3 positive     NA
# 12:       D     day3 positive     NA
# 13:       A     day4 positive     NA
# 14:       B     day4 positive      1
# 15:       C     day4 negative     NA
# 16:       D     day4 negative     NA
# 17:       A     day5 positive     NA
# 18:       B     day5 negative     NA
# 19:       C     day5 negative     NA
# 20:       D     day5 negative     NA
# 21:       A     day6 positive     NA
# 22:       B     day6 negative     NA
# 23:       C     day6 positive      1
# 24:       D     day6 negative     NA
# 25:       A     day7 positive     NA
# 26:       B     day7 negative     NA
# 27:       C     day7 positive     NA
# 28:       D     day7 negative     NA
#     subject variable    value marker
method 2. filter the relevant rows
#melt to long format
DT.long <- melt( DT, "subject" )
#get pos-after-neg by subject, create marker-column
DT.long[ DT.long[, .I[ value == "positive" & shift( value, fill = "positive", type = "lag" ) == "negative" ], by = subject ]$V1, ][]
#    subject variable    value
# 1:       B     day4 positive
# 2:       C     day6 positive