Скажем, у меня есть несколько столбцов во фрейме данных, которые измеряют одну и ту же концепцию, но с использованием разных методов (например, существует несколько видов тестов IQ, и студенты могут иметь любой из них или вообще ни одного). Я хочу объединить различные методы в один столбец (очевидный вариант использования tidyr).
Если данные примерно такие:
mydata <- data.frame(ID = 55:64,
age = c(12, 12, 14, 11, 20, 10, 13, 15, 18, 17),
Test1 = c(100, 90, 88, 115, NA, NA, NA, NA, NA, NA),
Test2 = c(NA, NA, NA, NA, 100, 120, NA, NA, NA, NA),
Test3 = c( NA, NA, NA, NA, NA, NA, 110, NA, 85, 150))
Я, естественно, хотел бы выполнить что-то вроде этого (обратите внимание, что я использую na.rm = TRUE, чтобы многие NA в моем наборе данных не получали свои собственные строки):
library(tidyr)
tests <- gather(mydata, key=IQSource, value=IQValue, c(Test1, Test2, Test3), na.rm = TRUE)
tests
Давая мне:
ID age IQSource IQValue
1 55 12 Test1 100
2 56 12 Test1 90
3 57 14 Test1 88
4 58 11 Test1 115
15 59 20 Test2 100
16 60 10 Test2 120
27 61 13 Test3 110
29 63 18 Test3 85
30 64 17 Test3 150
Проблема в том, что у меня есть студентка (ID = 62), у которой нет каких-либо оценок IQ ни по одному из трех, и я не хочу потерять другие ее данные (данные в Столбцы ID и возраста).
Есть ли способ отличить в tidyr, что да, я хочу удалить NA, где у меня есть данные, по крайней мере, в одном столбце, который я собираю, но в то же время хочу предотвратить потерю данных, когда все столбцы для сбора являются NA?)