Можно указать gather
данные в «длинном» формате, filter
строки с «Y», сгруппированные по «Name», вставить элементы в «key» (str_c
) и * 1004.* с исходным набором данных
library(tidyverse)
df1 %>%
gather(key, val, -Name) %>%
filter(val == 'Y') %>%
group_by(Name) %>%
summarise(Sports = str_c(key, collapse= ' and ')) %>%
left_join(df1) %>%
select(names(df1), "Sports")
# A tibble: 3 x 5
# Name Cricket Football Swimming Sports
# <chr> <chr> <chr> <chr> <chr>
#1 A Y Y N Cricket and Football
#2 B N Y N Football
#3 C Y N Y Cricket and Swimming
данные
df1 <- structure(list(Name = c("A", "B", "C"), Cricket = c("Y", "N",
"Y"), Football = c("Y", "Y", "N"), Swimming = c("N", "N", "Y"
)), class = "data.frame", row.names = c(NA, -3L))