Выполните бинарную операцию для столбцов с тем же именем в кадре данных - PullRequest
1 голос
/ 11 апреля 2019

У меня есть набор данных, в котором есть столбцы с одинаковыми именами.

    name check_id a b a b
1 item_1    00192 1 0 0 0
2 item_2    21231 0 1 0 0
3 item_3     2413 1 0 0 1
4 item_1    23423 1 0 0 0
5 item_4      232 0 0 1 0
6 item_3      232 1 0 0 1

Мне нужно оставить только один a и один b столбец, применив операцию or между столбцами с одинаковымиимя.

1 Ответ

1 голос
/ 11 апреля 2019

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

d = read.table(text = '    name check_id a b a b
1 item_1    00192 1 0 0 0
2 item_2    21231 0 1 0 0
3 item_3     2413 1 0 0 1
4 item_1    23423 1 0 0 0
5 item_4      232 0 0 1 0
6 item_3      232 1 0 0 1', header = T, check.names = F)

names_to_replace = c("a", "b")
new_cols = list()

for (n in names_to_replace) {
  # calculate new column
  new_cols[[n]] = as.integer(Reduce(f = "|", x = d[names(d) == n]))
  # drop old columns
  d[names(d) == n] = list(NULL)
}
d = cbind(d, new_cols)
#     name check_id a b
# 1 item_1      192 1 0
# 2 item_2    21231 0 1
# 3 item_3     2413 1 1
# 4 item_1    23423 1 0
# 5 item_4      232 1 0
# 6 item_3      232 1 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...