我一直在寻找这个问题的答案,但我一直无法找到一个能帮助我处理包含数字和字符串的列的答案。
Name <- c("Doe, John","Doe, John","Doe, John", "Doe, Jane", "Doe, Jane","Doe, Jane","Parker, Peter","Parker, Peter","Parker, Peter", "Stark, Tony","Stark, Tony","Stark, Tony")
Accession <- c(123, 234, 345, 456, 567, 678, 789, 8910, 1023, 1134, 1567, 1769)
MRN <-c(55555, 55555, 55555, 66666, 66666, 66666, 77777, 77777, 77777, 88888, 88888, 88888)
Collected <-c("2022-01-05", "2022-01-06", "2022-01-07", "2022-01-08", "2022-01-09", "2022-01-10", "2022-01-11", "2022-01-12", "2022-01-13", "2022-01-14", "2022-01-15", "2022-01-16")
Result <-c(137, "Not Detected", 356, 1025, 1405, 538, "Not Detected", "Not Detected", "Not Detected", "Not Detected", 137, "Not Detected")
CV <- data.frame(Name, Accession, MRN, Collected, Result)
我对一群人有多种观察(有时每人最多100个)我想从他们第一次观察开始计数,基于他们获得阳性结果的日期,我想将其作为新列Days_till_Pos
,从第一个阳性结果日期开始,我将计算直至结果为“未检出”的天数从而产生新的列Days_till_Neg
。
我希望数据如下所示,其中结果按MRN
分组。
在这种情况下,如果Result
列中有数值,则将其视为阳性,如果显示“未检出”,则将其视为阴性。此外,如果他们的第一个结果为阳性,则Days_till_Pos
应显示NA
,如果他们从未获得阳性结果,则Days_till_Neg
列也应显示NA
。
Name<- c("Doe, John","Doe, Jane","Parker, Peter", "Stark, Tony")
MRN<- c(55555, 66666, 77777, 88888)
Days_till_Pos<- c(NA, NA, NA, 1)
Days_till_Neg<- c(1,0,NA, 1)
CV1<- data.frame(Name, MRN, Days_till_Pos, Days_till_Neg)
Name MRN Days_till_Pos Days_till_Neg
Doe,John 55555 NA 1
Doe, Jane 66666 NA 0
Parker, Peter 77777 NA NA
Stark, Tony 88888 1 1
1条答案
按热度按时间dtcbnfnu1#
我不能完全肯定这是正确的,但很乐意根据需要进一步修改。
第一个
mutate
是为了确保您有日期格式的Collected
。按
Name
和MRN
分组后,您可以对每个患者使用summarise。对于
Days_till_Pos
,检查第一个Result
是否为负值。如果为负值,则取第一个采集日期(当为正值时)与第一个采集日期(已知为负值)之间的差值。或者,如果第一个结果为正值,则仅包括NA
。对于
Days_till_Neg
,检查all
结果是否为阴性。如果是,则包括NA
。如果不是,则取Result
为阴性但lag
(前一日期)结果为阳性的日期。这将提供从阳性转变为阴性的日期。然后减去阳性检测的第一个日期。请注意,这是假设患者在阴性和阳性检测之间不会多次振荡。
产出