#r #tidyverse #rowwise
Вопрос:
Я хотел бы найти комбинацию некоторого значения в кадре данных из одного столбца и некоторой строки со значением из того же столбца и предыдущей строки. Вот воспроизводимый пример.
У меня есть четыре возможных условия, и я хочу определить пары (двух) последовательных строк.
library(tidyverse) library(purrr) df lt;- data.frame( condition = sample( x = c("IL", "IR", "EL", "ER"), size = 10, replace = TRUE ) ) df condition 1 IR 2 EL 3 IR 4 EL 5 ER 6 IL 7 IR 8 EL 9 EL 10 EL
Другими словами, я хотел бы получить колонку «пара», такую как:
condition pair 1 IR NA 2 EL IR-EL 3 IR EL-IR 4 EL IR-EL 5 ER EL-ER 6 IL ER-IL 7 IR IL-IR 8 EL IR-EL 9 EL EL-EL 10 EL EL-EL
Я пробовал использовать purrr::accumulate() в сочетании с paste (), но он накапливает все предыдущие значения. Как я могу сохранить только предыдущие и текущие значения (т. Е. отставание 1)?
df %gt;% mutate( pair = accumulate( .x = condition, .f = ~paste(.x, .y, sep = "-") ) ) condition pair 1 IL IL 2 ER IL-ER 3 IL IL-ER-IL 4 IL IL-ER-IL-IL 5 EL IL-ER-IL-IL-EL 6 EL IL-ER-IL-IL-EL-EL 7 IL IL-ER-IL-IL-EL-EL-IL 8 IL IL-ER-IL-IL-EL-EL-IL-IL 9 IL IL-ER-IL-IL-EL-EL-IL-IL-IL 10 IR IL-ER-IL-IL-EL-EL-IL-IL-IL-IR
Я хочу сохранить только пары из двух последовательных испытаний. Есть идеи? NB: Я бы предпочел вариант tidyverse.
Ответ №1:
Воспользуйся lag
.
df %gt;% mutate(pair = paste(lag(condition),condition,sep="-")) condition pair 1 ER NA-ER 2 EL ER-EL 3 IR EL-IR 4 ER IR-ER 5 ER ER-ER 6 IR ER-IR 7 IR IR-IR 8 IR IR-IR 9 IR IR-IR 10 EL IR-EL