#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!