#r #dplyr
#r #dplyr
Вопрос:
У меня есть набор данных, в котором есть столбцы с одинаковыми именами.
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. Вы можете использовать номера столбцов, когда имена не уникальны, или вы можете преобразовать имена, чтобы они были уникальными. Рефакторинг будет выполнен автоматически, если вы это сделаете
your_data = data.frame(your_data)
. (В итоге вы получитеa
иa.1
,b
иb.1
и т. Д.
Ответ №1:
Вот пример использования имен. Это немного сложно и, возможно, хрупко, но оно работает с вашими образцами данных и должно увеличиваться, даже если у вас более 2 дубликатов.
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