Объедините два бинарных столбца в один, сохраните бинарную опцию

Вставка в качестве ввода этого фрейма данных:

data.frame(stocknum = c(1,2,3), text = c(1,0,1), final = c(0,0,1))

Как можно объединить два столбца text и final в один, сохранить бинарную опцию, пример вывода

data.frame(stocknum = c(1,2,3), text = c(1,0,1), final = c(0,0,1), merged_text_final = c(1,0,1))
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
86
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Мы можем использовать pmax из base R

df1$merged_text_final <- with(df1, pmax(text, final))

Или другой вариант | с Reduce

df1$merged_text_final <- +(Reduce(`|`, df1[c("text", "final")]))

Данные

df1 <- data.frame(stocknum = c(1,2,3), text = c(1,0,1), final = c(0,0,1))

@rek Первый вариант можно обобщить, то есть do.call(pmax, df1[-1]) так же, как второй с Reduce

akrun 18.12.2020 19:40

@rek вы можете указать имена в виде вектора, т.е. df1[c("text", "final")] обновленного или с числовым индексом df1[2:3]

akrun 18.12.2020 19:45

@rek Сделал, чтобы поменять местами 1-> 0 и 0-> 1, тогда вы можете сделать +(!do.call(pmax, df[c("text", "final")]))

akrun 18.12.2020 19:55

Использование any.

+apply(d[-1], 1, any)
# [1] 1 0 1

Выдает предупреждение, но мы знаем почему и можем сделать suppressWarnings(+apply(d[-1], 1, any))

Еще вариант, rowMeans.

+(rowMeans(d[-1])>0)
# [1] 1 0 1

Базовый вариант R

transform(
  df,
  merged_text_final = +(rowSums(cbind(text, final)) > 0)
)

Дает

  stocknum text final merged_text_final
1        1    1     0                 1
2        2    0     0                 0
3        3    1     1                 1

Data.table вариант

setDT(df)[, merged_text_final := +(rowSums(.SD) > 0), .SDcols = c("text", "final")]

Дает

> df
   stocknum text final merged_text_final
1:        1    1     0                 1
2:        2    0     0                 0
3:        3    1     1                 1

Другие вопросы по теме