Объедините две последовательности данных

#r #combinations #sequence #data-manipulation #data-cleaning

Вопрос:

У меня есть две последовательности данных (с пятью переменными в каждой последовательности), которые я хочу соответствующим образом объединить в одну, используя эту рубрику:

 variable sequence 1 variable sequence 2 variable in combined sequence   0 0 1  0 1 2  1 0 3  1 1 4  

Вот некоторые примеры данных:

 set.seed(145) mm lt;- matrix(0, 5, 10) df lt;- data.frame(apply(mm, c(1,2), function(x) sample(c(0,1),1))) colnames(df) lt;- c("s1_1", "s1_2", "s1_3", "s1_4", "s1_5", "s2_1", "s2_2", "s2_3", "s2_4", "s2_5") gt; df  s1_1 s1_2 s1_3 s1_4 s1_5 s2_1 s2_2 s2_3 s2_4 s2_5 1 1 0 0 0 0 0 1 1 0 0 2 1 1 1 0 1 1 0 0 0 0 3 1 1 0 0 0 1 1 0 1 1 4 0 0 1 0 1 1 0 1 0 1 5 0 1 0 0 1 0 0 1 1 0  

Здесь s1_1 представлена переменная 1 в последовательности 1, s2_1 представлена переменная 2 в последовательности 2 и так далее. В этом примере s1_1 =1 и s2_1 =0 переменная 1 в комбинированной последовательности будет кодироваться как 3. Как мне это сделать в R?

Ответ №1:

Вот способ —

 return_value lt;- function(x, y) {  dplyr::case_when(x == 0 amp; y == 0 ~ 1,   x == 0 amp; y == 1 ~ 2,   x == 1 amp; y == 0 ~ 3,   x == 1 amp; y == 1 ~ 4) } sapply(split.default(df, sub('.*_', '', names(df))), function(x)   return_value(x[[1]], x[[2]]))  # 1 2 3 4 5 #[1,] 3 2 2 1 1 #[2,] 4 3 3 1 3 #[3,] 4 4 1 2 2 #[4,] 2 1 4 1 4 #[5,] 1 3 2 2 3   

split.default разбивает данные по последовательности и с помощью sapply этой функции return_value сравнивает два столбца в каждом кадре данных.

Комментарии:

1. Спасибо вам за решение @Ronak Shah!