Вставка в качестве ввода этого фрейма данных:
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))
Мы можем использовать 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 вы можете указать имена в виде вектора, т.е. df1[c("text", "final")] обновленного или с числовым индексом df1[2:3]
@rek Сделал, чтобы поменять местами 1-> 0 и 0-> 1, тогда вы можете сделать +(!do.call(pmax, df[c("text", "final")]))
Использование 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
@rek Первый вариант можно обобщить, то есть do.call(pmax, df1[-1]) так же, как второй с Reduce