У меня большой набор данных, состоящий из нескольких столбцов с именами состояний. Каждая строка состоит из индивида и того, в каком состоянии они проживают, и в столбце соответствующего состояния они обозначаются символом «да».
Name <- c("John", "Jane", "Joe", "Jim", "Jeane", "Jeff", "Jack")
Q1State1 <- c("no", "yes", "yes", "no", "no", "no", "no")
Q1State2 <- c("yes", "no", "no", "no", "no", "no", "yes")
Q1State3 <- c("no", "no", "no", "yes", "yes", "yes", "no")
Q2State1 <- c("no", "yes", "yes", "no", "no", "no", "no")
Q2State2 <- c("yes", "no", "no", "no", "no", "no", "yes")
Q2State3 <- c("no", "no", "no", "yes", "yes", "yes", "no")
DF <- data.frame(Name, Q1State1, Q1State2, Q1State3, Q2State1, Q2State2, Q2State3)
Name Q1State1 Q1State2 Q1State3 Q2State1 Q2State2 Q2State3
1 John no yes no no yes no
2 Jane yes no no yes no no
3 Joe yes no no yes no no
4 Jim no no yes no no yes
5 Jeane no no yes no no yes
6 Jeff no no yes no no yes
7 Jack no yes no no yes no
Я бы хотел получить один столбец для состояния вместо нескольких столбцов. Конечный результат будет выглядеть так:
name Q1State Q2State
1 John State2 State2
2 Jane State1 State1
3 Joe State1 State1
4 Jim State3 State3
5 Jeane State3 State3
6 Jeff State3 State3
7 Jack State2 State2
Я могу использовать unite(DF, State1, State2, State3)
для выполнения sh второй части моей задачи без затруднений. Моя проблема связана с промежуточным шагом. Я не знаю, как выполнить sh заполнение ячеек с соответствующим названием состояния или пробелом. Я хотел бы, чтобы это выглядело так:
name Q1State1 Q1State2 Q1State3 Q2State1 Q2State2 Q2State3
1 John State2 State2
2 Jane State1 State1
3 Joe State1 State1
4 Jim State3 State3
5 Jeane State3 State3
6 Jeff State3 State3
7 Jack State2 State2
Аналогичный вопрос Заменить значения в столбце с указанием c значения строки из того же столбца, используя l oop, опубликованный ранее, но это один использовал первый ряд данных, чтобы заполнить ячейки. Я пытался использовать подобное кодирование в dplyr, но я не могу понять, как правильно назвать имена столбцов.
DF %>%
mutate_at(vars(starts_with('State')), ~ case_when(. == 'yes' ~colnames(.), TRUE ~ ''))
С этим кодом я получаю ошибку. Я не уверен, как определить, что заголовок столбца будет использоваться для заполнения ячеек. Я сказал, что пытался использовать mutate в dplyr, но не могу понять, как правильно вызывать заголовок столбца.