Хобрук: Ваш путь к мастерству в программировании

Эффективный способ указать несколько переменных индикатора в строке с помощью составного ключа?

Мои объекты индикатора и значения имеют составные ключи, которые сопоставляются друг с другом. Существует ли эффективный способ объединения значений в объект индикатора?

Учитывая «пустой» кадр данных индикатора:

indicator <- data.frame(Id1=c(1,1,2,2,3,3,4,4), Id2=c(10,11,10,12,10,12,10,12),Ind_A=rep(0,8),Ind_B=rep(0,8))

    Id1    Id2 Ind_A Ind_B
1     1     10     0     0
2     1     11     0     0
3     2     10     0     0
4     2     12     0     0
5     3     10     0     0
6     3     12     0     0
7     4     10     0     0
8     4     12     0     0

и кадр данных значений:

values <- data.frame(Id1=c(1,1,1,2,2,3,3,4,4,4),Id2=c(10,10,11,10,12,10,12,10,10,12),Indicators=c('Ind_A','Ind_B','Ind_A','Ind_B','Ind_A','Ind_A','Ind_A','Ind_A','Ind_B','Ind_A'));

     Id1    Id2 Indicators
1      1     10      Ind_A
2      1     10      Ind_B
3      1     11      Ind_A
4      2     10      Ind_B
5      2     12      Ind_A
6      3     10      Ind_A
7      3     12      Ind_A
8      4     10      Ind_A
9      4     10      Ind_B
10     4     12      Ind_A

Я хочу закончить с:

Id1     Id2   Ind_A    Ind_B
  1      10       1        1
  1      11       1        0
  2      10       0        1
  2      12       1        0
  3      10       1        0
  3      12       1        0
  4      10       1        1
  4      12       1        0
14.05.2015

Ответы:


1

Вы можете использовать dcast для преобразования набора данных «значения» из «длинного» в «широкий» формат.

library(reshape2)
dcast(values, Id1+Id2~Indicators, value.var='Indicators', length)
#    Id1 Id2 Ind_A Ind_B
#1   1  10     1     1
#2   1  11     1     0
#3   2  10     0     1
#4   2  12     1     0
#5   3  10     1     0
#6   3  12     1     0
#7   4  10     1     1
#8   4  12     1     0

Как показано выше, вам может не понадобиться создавать второй набор данных, но если вам нужно изменить значения в одном наборе данных на основе значения в другом,

indicator$Ind_A <- (do.call(paste, c(indicator[1:2], 'Ind_A')) %in% 
                do.call(paste, values))+0L
indicator$Ind_B <- (do.call(paste, c(indicator[1:2], 'Ind_B')) %in% 
                do.call(paste, values))+0L
14.05.2015
Новые материалы

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

Обзор 20 основных и современных методов работы с массивами в JavaScript
Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

Да, но я чувствую необходимость указать, что это или не единственные два.
Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.