【发布时间】:2018-12-05 20:12:57
【问题描述】:
我有一个数据集,其中在不同时间从同一个人那里收集了多个不同类型的样本,这给了我一个看起来像这样的数据集
Patient SampleType Collection-Date
1 A 15-02-2001
1 B 15-02-2001
2 A 19-02-2001
2 B 19-02-2001
3 A 16-05-2001
3 B 16-05-2001
1 A 16-03-2001
1 B 16-03-2001
3 B 05-03-2001
请注意,日期采用日-月-年格式。我想在 R 中做的是创建一个新变量,我可以使用它来识别每个样本属于哪个时间点,以提供以下输出。
Patient SampleType Collection-Date TimePoint
1 A 15-02-2001 T1
1 B 15-02-2001 T1
2 A 19-02-2001 T1
2 B 19-02-2001 T1
3 A 16-05-2001 T1
3 B 16-05-2001 T1
1 A 16-03-2001 T2
1 B 16-03-2001 T2
3 B 05-03-2001 T2
我主要使用以下代码研究了如何做到这一点:
#generate a key to connect Patients and samples
df<-mutate(df, Key=paste(df$Patient,df$SampleType, sep = "")
#Create a list of Keys
KeyList <- list(df$Key)
#Separate the original data frame based on Key
#Create new dataframes for all values of Key
for (i in unique(DateComp$Key)){
nam<-paste("df", i, sep = ".")
assign(nam, DateComp[DateComp$Key== i,])
}
这会为每个患者样本类型组合生成一个唯一的数据框 然后我可以通过执行以下操作来创建所需的结果:
df.1A[order(as.Date(1A$Collection-Date, format="%d%m%Y")),]
rownames(df.1A)= NULL
df.1A <- mutate(df.1A, TimePoint = paste("TP", row_number(),sep=""))
这主要为患者 1 创建所需的输出,样本类型 A 读取时
Patient SampleType Collection-Date Key TimePoint
1 A 15-02-2001 1A TP1
1 A 16-03-2001 1A TP2
但是,这种方法有两个问题: 1)我必须为每个唯一创建的数据框手动编写代码
(所以如果有人能解释我如何使用 lapply 函数或类似函数来做到这一点,我将不胜感激)
2) 如果患者第二次就诊时只有特定的样本类型,那么它将被标记为时间点 1 而不是时间点 2 有谁知道我如何重写代码所以这不会成为问题? 提前致谢!
【问题讨论】: