Я пытаюсь преобразовать мои исходные данные в формат start-stop для регрессии Кокса.Мой исходный набор данных выглядит так:
df = data.frame(initial = c(25, 25, 20, 21, 21, 17),
total = c(4.25, 28, 0.5, 38, 14, 43),
age = c(30, 53, 20, 59, 35, 60),
ethanol = c(0.04, 0.306, 0.201, 0.222, 0.047, 0.085),
status = c(0, 0, 0, 0, 0, 1))
Например, для первого наблюдения исходный формат данных выглядит следующим образом:
initial total age ethanol status
1 25 4.25 30 0.04 0
Ожидаемый формат данных выглядит следующим образом:
id start stop ethanol status
1 0.00 25.00 0.00 0
1 25.00 29.25 0.04 0
1 29.25 30 0 0
Поэтому я пишу коды, как показано ниже
edf = data.frame(id = integer(),
start = numeric(),
stop = numeric(),
ethanol = numeric(),
status = integer())
j = 1
for( i in 1:4){
if( (df[i, 1] + df[i,2]) >= df[i,3] ){
edf[j,1] = i
edf[j,2] = 0
edf[j,3] = df[i,"initial"]
edf[j,4] = 0
edf[j,5] = 0
j = j+1
edf[j,1] = i
edf[j,2] = df[i,"initial"]
edf[j,3] = df[i,"initial"] + df[i,"total"]
edf[j,4] = df[i,"ethanol"]
edf[j,5] = df[i,"status"]
} else{
edf[j,1] = i
edf[j,2] = 0
edf[j,3] = df[i,"initial"]
edf[j,4] = 0
edf[j,5] = 0
j = j+1
edf[j,1] = i
edf[j,2] = df[i,"initial"]
edf[j,3] = df[i,"initial"] + df[i,"total"]
edf[j,4] = df[i,"ethanol"]
edf[j,5] = 0
j = j+1
edf[j,1] = i
edf[j,2] = df[i,"initial"] + df[i,"total"]
edf[j,3] = df[i,"age"]
edf[j,4] = 0
edf[j,5] = df[i,"status"]
}
}
Но полученный мной кадр данных (например, первое наблюдение):
id start stop ethanol status
1 0.00 25.00 0.00 0
1 25.00 29.25 0.04 0
Одна строкаотсутствует:
id start stop ethanol status
1 29.25 30 0 0
Похоже, что последняя часть в операторе else не была выполнена:
j = j+1
edf[j,1] = i
edf[j,2] = df[i,"initial"] + df[i,"total"]
edf[j,3] = df[i,"age"]
edf[j,4] = 0
edf[j,5] = df[i,"status"]
Я не знаю, что не так, Есть предложения?Я использую R версии 3.4.4 на MacOS (x86_64-apple-darwin15.6.0.) Заранее спасибо!