Подход с основанием R:
- Применяется к столбцу
C
, замените ",\\s"
(запятая с последующим пробелом) на "|"
- Используйте
grepl
с результирующими регулярными выражениями, чтобы проверить, какие дни в days.abb
присутствуют - Объединить результирующие двоичные векторы по строкам и
cbind
с существующими столбцами A
и B
## data
df <- data.frame(
A = c(13, 15, 17),
B = c("yes", "no", "yes"),
C = c("Mon, Thu, Sun", "Thu, Tue, Fri", "Sat, Mon, Wen")
)
## abbreviated weekdays
days.abb <- c("Sun", "Mon", "Tue", "Wen", "Thu", "Fri", "Sat")
## find weekday indices for each character in column C
df1 <- cbind(df[, -3], t(sapply(df[, 3], function(x) 1 * grepl(gsub(",\\s", "|", x), days.abb))))
## update column names
setNames(df1, c("A", "B", days.abb))
#> A B Sun Mon Tue Wen Thu Fri Sat
#> 1 13 yes 1 1 0 0 1 0 0
#> 2 15 no 0 0 1 0 1 1 0
#> 3 17 yes 0 1 0 1 0 0 1