У меня есть большой фрейм данных, где каждое значение в столбце ID представляет человека. Я хочу свернуть фрейм данных, чтобы каждый идентификатор (человек) заполнял меньше строк (меньше дублированных идентификаторов), но я хочу свернуть идентификаторы только в том случае, если значения, отсутствующие в других столбцах строки с идентификатором 4 (например), заменены на отсутствующие значения формируют другую строку также с ID 4 - все используют R
код
Пример кадра данных ниже.
ID <- c(1, 1, 2, 4, 4, 5)
name <- c('kate', NA, 'jim', NA, 'dan', 'lou')
gender <- c(NA, 'female', 'male', 'male', NA, 'female')
(df <- data.frame(id, name, gender))
ID name gender
1 1 kate <NA>
2 1 <NA> female
3 2 jim male
4 4 <NA> male
5 4 dan <NA>
6 5 lou female
Результатом будет кадр данных, который объединяет отсутствующие значения по идентификатору, поэтому информация из дублированного идентификатора сообщает, что должно существовать в пропущенных значениях столбца для того же идентификатора в другой строке.
Желаемый результат:
ID name gender
1 1 kate female
3 2 jim male
4 4 dan male
6 5 lou female
Проблема в том, что иногда у нас есть такой фрейм данных:
ID <- c(1, 1, 2, 4, 4, 5, 5)
name <- c('kate', NA, 'jim', NA, 'dan', 'lou', 'lou smith')
gender <- c(NA, 'female', 'male', 'male', NA, 'female', 'female')
(df2 <- data.frame(ID, name, gender))
ID name gender
1 1 kate <NA>
2 1 <NA> female
3 2 jim male
4 4 <NA> male
5 4 dan <NA>
6 5 lou female
7 5 lou smith female
8 5 <NA> female
И я не хочу удалять дублированную строку идентификатора, если она содержит противоречивую информацию для своего коллеги. В этом случае я бы просто хотел, чтобы результат был:
ID name gender
1 1 kate female
2 2 jim male
4 4 dan male
5 5 lou female
6 5 lou smith female