Были проблемы с поиском лучшего способа выразить это в заголовке, но более широкая проблема заключается в том, что я пытаюсь объединить два непересекающихся столбца (разделенных по полу) в наборе данных в третий, нейтральный с гендерной точки зрения столбец со значениями для каждой строки / участника ... и затем сделайте это для i раз.
Вот пример. Мой набор данных - ELSH2, и первый набор столбцов будет HTM1, HTW1 и HT1. Я довольно быстро понял, как объединить столбцы всего один раз:
ELSH2$HT1 <- ifelse(is.na(ELSH2$HTM1), ELSH2$HTW1, ELSH2$HTM1)
Так что все значения из столбцов HTW1 и HTM1 теперь объединены в столбце HT1. Но по сути я хочу:
ELSH2$HTi <- ifelse(is.na(ELSH2$HTMi), ELSH2$HTWi, ELSH2$HTMi)
, где i - это каждое последовательное число в диапазоне 1- k , k - это наибольшее число в конце имен столбцов, соответствующих вышеуказанным строкам (т. е. есть столбцы k , начинающиеся с HTM или HTW; HTM и HTW всегда будут иметь одинаковое значение k ). В этом примере k = 5, но я собираюсь сделать это с несколькими случаями (т. Е. С другими строками, которые должны совпадать вместо HTM / HTW), включая различные значения k .
Я пытался использовать grepl
:
ELSH2[,grepl("HT.", names(ELSH2))] <- ifelse(
is.na(ELSH[,grepl("HTM.", names(ELSH2))]),
ELSH2[,grepl("HTW.", names(ELSH2))],
ELSH2[,grepl("HTM.", names(ELSH2))])
Но я получаю следующую ошибку:
Warning message:
In `[<-.data.frame`(`*tmp*`, , grepl("HTM.", names(ELSH2)), value = list( :
provided 5300 variables to replace 10 variables
Я почти уверен, что что-то не так с я пытаюсь создать здесь столбцы HT, но даже если я создаю их вручную, я получаю такую же ошибку.
РЕДАКТИРОВАТЬ: Вот пример набора данных.
HTM1<- rnorm(10)
HTW1<- rnorm(10)
HTM2<- rnorm(10)
HTW2<- rnorm(10)
HTM3<- rnorm(10)
HTW3<- rnorm(10)
HTM4<- rnorm(10)
HTW4<- rnorm(10)
HTM5<- rnorm(10)
HTW5<- rnorm(10)
HTM <- data.frame(HTM1,HTM2,HTM3,HTM4,HTM5)
HTW <- data.frame(HTW1,HTW2,HTW3,HTW4,HTW5)
HTM[1, ] <- NA
HTM[3, ] <- NA
HTM[5, ] <- NA
HTM[7, ] <- NA
HTM[9, ] <- NA
HTW[2, ] <- NA
HTW[4, ] <- NA
HTW[6, ] <- NA
HTW[8, ] <- NA
HTW[10, ] <- NA
ELSH2 <- cbind(HTW, HTM)
ELSH2 выглядит следующим образом:
И я хочу, чтобы последние столбцы HT выглядели как это плохо сфотографированное чудовище:
Просто чередование столбцов, где они имеют пропущенные значения.