Назначение имени столбца в качестве значения ячейки, если столбец содержит указанное значение c - PullRequest
2 голосов
/ 16 февраля 2020

Я довольно новичок в R. У меня есть фрейм данных с парами переменных допуска и разряда, которые должны совпадать, например:

  V1adm V1dis V2adm V2dis V3adm V3dis
1   120   120   yes   yes    60    60
2   110   110   yes  <NA>    40    40
3    60    NA    no  <NA>    NA    NA
4    90    NA  <NA>    no    20    NA

Я создал фрейм данных с ИСТИНОЙ, если одна из переменных пары отсутствуют:

# Variable names
adm_vars<- c("V1adm", "V2adm", "V3adm")
dis_vars<- c("V1dis", "V2dis", "V3dis")

# Create empty dataframe
pairs_NA<- matrix(NA, ncol=3, nrow=nrow(data))
pairs_NA<- as.data.frame(pairs_NA)
names(pairs_NA)<- paste(adm_vars, dis_vars, sep = '_')

# Add TRUE if adm OR dis variable NA
for(i in 1:3){
  x<- data[, adm_vars[i]]
  y<- data[, dis_vars[i]]
  pairs_NA[,i]<- is.na(x) | is.na(y)
}

  V1adm_V1dis V2adm_V2dis V3adm_V3dis
1       FALSE       FALSE       FALSE
2       FALSE        TRUE       FALSE
3        TRUE        TRUE        TRUE
4        TRUE        TRUE        TRUE

Для строк, в которых отсутствуют все 3, я хотел бы создать фрейм данных, который принимает имя столбца из 'pair_NA' в качестве значения ячейки, если эта пара отсутствует (т.е. столбец ИСТИНА в pair_NA). Это должно выглядеть примерно так:

              1             2             3
3   V1adm_V1dis   V2adm_V2dis   V3adm_V3dis
4   V1adm_V1dis   V2adm_V2dis   V3adm_V3dis

Есть ли способ, которым я могу назначить имя столбца 'pair_NA' в качестве значения ячейки, если в этом столбце есть 'ИСТИНА' для каждого указанного c строка?

1 Ответ

2 голосов
/ 16 февраля 2020

Мы можем создать логический индекс на основе rowSums и реплицировать имена столбцов 'pair_NA' после поднабора строк, в которых все значения TRUE

i1 <- rowSums(pairs_NA) == ncol(pairs_NA)
matrix(names(pairs_NA)[col(pairs_NA[i1,])], ncol = ncol(pairs_NA))
#    [,1]          [,2]          [,3]         
#[1,] "V1adm_V1dis" "V2adm_V2dis" "V3adm_V3dis"
#[2,] "V1adm_V1dis" "V2adm_V2dis" "V3adm_V3dis"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...