Замените значения в столбце с указанием c значения строки из того же столбца, используя цикл - PullRequest
0 голосов
/ 09 января 2020

У меня есть данные, полученные из опроса, в котором указано имя получателя и выбрано оно или нет определенное графство c в штате. Структура опроса выводит выкл для любого не выбранного округа и для выбранного округа. В штате насчитывается около 100 округов, поэтому в конечном итоге будет много столбцов, которые действительно соответствуют одному и тому же вопросу. То, что я хочу сделать, - это заменить все ячейки на «вкл» с названием округа, а все ячейки - на «пробел». Оттуда я могу без особых трудностей объединить множество столбцов в один. Ниже я воссоздал краткий примерный набор данных

name <- c("Recipient", "AB", "BC", "DF", "EF", "WE")
Q1 <- c("County1", "Off", "On", "On", "Off", "Off")
Q2 <- c("County2", "On", "Off", "Off", "Off", "Off")
Q3 <- c("County3", "Off", "Off", "Off", "On", "On")
dt <- data.frame(name, Q1, Q2, Q3)
> dt
       name       Q1           Q2           Q3
1 Recipient  County1      County2      County3
2        AB      Off           On          Off
3        BC       On          Off          Off
4        DF       On          Off          Off
5        EF      Off          Off           On
6        WE      Off          Off           On

Я ищу желаемый вывод

       name       Q1           Q2           Q3
1 Recipient  County1      County2      County3
1        AB               County2     
2        BC County1           
3        DF County1            
4        EF                             County3
5        WE                             County3

Я не уверен, как go об этом и обозначить, что первая строка используется для заполнения ячеек.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 09 января 2020

Мы создаем логический вектор и присваиваем значения первой строки на основе логического вектора

i1 <- dt[-1] == 'On'
dt[-1][i1] <- unlist(dt[1, -1])[col(dt[-1])][i1]
dt[-1][!i1] <- ""
dt
#       name       Q1       Q2       Q3
#1 Recipient                           
#2        AB          County 2         
#3        BC County 1                  
#4        DF County 1                  
#5        EF                   County 3
#6        WE                   County 3

Или с dplyr

library(dplyr)
dt %>% 
  mutate_at(vars(starts_with('Q')), ~ case_when(. == 'On' ~first(.), TRUE ~ ''))

data

dt <- data.frame(name, Q1, Q2, Q3, stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...