Я относительно новичок в R. У меня есть кадр данных test
, который выглядит так:
PMID # id
LID
STAT
MH
RN
OT
PST # cue
LID
STAT
MH
PMID # id
OT
PST # cue
LID
DEP
RN
PMID # id
PST # cue
и я хочу, чтобы это выглядело так:
PMID # id
LID
STAT
MH
RN
OT
PST # cue
PMID # id
LID
STAT
MH
OT
PST # cue
PMID # id
LID
DEP
RN
PST # cue
По сути, я хочу, чтобы записи, следующие за PMID, относились к этому конкретному PMID, как в случае с первым PMID. Однако после первого PMID этот PMID размещается случайным образом между своими записями. Однако каждый PMID заканчивается PST, поэтому я хочу, чтобы последующие PMID после первого были перемещены в место после предыдущего местоположения PST. У меня есть два фрейма данных, которые содержат расположение индекса каждого PMID и PST. Так, например, для PMID df a_new
содержит
1
11
17
а для PST df b
содержит
7
13
18
Это то, что я пробовал, но поскольку у меня более 24 миллионов строк, он не закончил работу через несколько часов, и когда я остановил его, мой фрейм данных не изменился:
for (i in 1:nrow(test))
{
if (i %in% a_new$X1) # if it's a PMID
{
entry <- match(i, a_new$X1) # find entry index of PMID
if (entry != 1) # as long as not first row from a_new (that's corrected)
{
r <- b[i, 1] # row of PST
test <- rbind(test[1:r, ], test[entry, 1], test[-(1:r), ])
test <- test[-c(i+1), ] # remove duplicate PMID
}
}
}
Как видите, rbind
в этой ситуации будет крайне неэффективным. Пожалуйста, порекомендуйте.
test
не похож наdata.frame
: у него нет имени столбца и номера строки. - person HubertL   schedule 06.07.2017