У меня есть фрейм данных , который выглядит следующим образом:
df_start <- data.frame(
a = c(1, 1, 1, 1, 1),
b = c(0, 1, 0, 0, 0),
c = c(1, 0, 0, 0, 0),
n = c(0, 0, 0, 1, 0))
Я хочу проверить условие, если какой-либо из столбцов из df_start[,2:n]
(где n показывает последний столбецфрейм данных) равен df$a
, затем создайте два новых столбца, из которых первый возвращает 1, если условие имеет значение ИСТИНА, и 0, если это не так, а другой дает имя столбца, для которого условие было ИСТИНА.
Мне удалось создать первый столбец следующим образом:
library(dplyr)
# check condition
df_start <- df_start %>% mutate(cond = ifelse(a == b | a == c | a == n, 1, 0))
Хотя я думаю, что мне нужен другой подход, поскольку каждый раз у меня может быть разное количество столбцов.Поэтому мне нужно проверить условие для столбца a
и всех столбцов от 2 до последнего, но мне также нужно знать, для какого столбца было выполнено условие.
Желаемый результат:
# desired output
df_end <- data.frame(a = c(1, 1, 1, 1, 1),
b = c(0, 1, 0, 0, 0),
c = c(1, 0, 0, 0, 0),
n = c(0, 0, 0, 1, 0),
cond = c(1,1,0,1,0),
col_name = c("c", "b", NA, "n", NA))
Есть ли способ сделать это с dplyr
, может быть, или с базой R?Хотя любые другие решения приветствуются.