Подход Base R с использованием split.default
и max.col
.Используя split.default
, мы можем разделить столбцы на основе шаблона в их имени, чтобы каждый вопрос был разделен на список.Предполагая, что у каждого вопроса будет только одно значение TRUE
, мы можем использовать max.col
, чтобы найти индекс TRUE
.
sapply(split.default(df, sub("\\..*", "", names(df))), max.col)
# Q1 Q2
#[1,] 1 2
#[2,] 6 5
data
df <-read.table(text = "Q1.1 Q1.2 Q1.3 Q1.4 Q1.5 Q1.6 Q1.7 Q2.1 Q2.2 Q2.3 Q2.4 Q2.5
T F F F F F F F T F F F
F F F F F T F F F F F T", header = T)
Предполагается, что класс ваших данных «логичен».Если «T» / «F» хранятся в символьном формате (как в ответе @Maurits), нам нужно сначала преобразовать их в логические.
Использование данных @Maurits Evers
df[] <- lapply(df, as.logical)
sapply(split.default(df, sub("\\..*", "", names(df))), max.col)
# Q1 Q17
#[1,] 1 2
#[2,] 2 1