Synopsys
У меня уже есть решение, использующее цикл "for", но мне было интересно, есть ли элегантные способы, возможно, с использованием dplyr или базы R.
Существующие данные
2 кадра данных.Оба имеют точное количество неуникальных маркеров в точном порядке;кроме ЭЭГ имеет непредсказуемое количество нулей.Набор данных о поведении «поведение» имеет число стимулов «стим», связанных с маркером.(на самом деле у меня есть больше столбцов в каждом фрейме данных, но я не включил их для простоты),Сохранение порядка строк является обязательным.
Результат должен выглядеть следующим образом:
eeg2 = data.frame(
marker = c(0,0,1,0,0,2,0,0,3,0,0,1,0,0,2,0,0,3,0,7,0,13),
stim = c(0,0,168,0,0,168,0,0,168,0,0,78,0,0,78,0,0,78,0,23,0,55)
)
Мое решение
Это делает работу и производительность неплохой для большого набора данных eeg.
eeg2=eeg;
eeg2$stim=NA;
lrow=1;
for(i in 1:nrow(behav)){
behav_marker = behav[i, "marker"];
for(j in lrow:nrow(eeg)){
eeg_marker = eeg[j, "marker"];
if(eeg_marker == behav_marker){
eeg2[j,'stim'] = behav[i,'stim'];
lrow = j+1;
break;
}
}
}
Вопрос Можно ли улучшить мое решение более элегантным способом, используя dplyr илибазовые функции R?