Проблема:
Мне часто нужно выбрать набор переменных из data.frame в R. Мои исследования основаны на социальных и поведенческих науках, и довольно распространено иметь data.frame с несколькими сотнями переменных (например, будет информация об уровне предмета для целого ряда вопросов обследований, демографических элементов, показателей эффективности и т.д.. и т.д.).
В рамках анализа я часто хочу выбрать подмножество переменных. Например, я бы хотел получить:
- описательная статистика для набора переменных
- корреляционная матрица на множестве переменных
- факторный анализ по набору переменных
- предиктора в линейной модели
Теперь я знаю, что есть много способов написать код, чтобы выбрать подмножество переменных. Quick-r имеет хороший обзор общих способов извлечения подмножеств переменных из файла data.frame.
например,
myvars <- c("v1", "v2", "v3")
newdata <- mydata[myvars]
Тем не менее, меня интересует эффективность этого процесса, особенно там, где вам может понадобиться извлечь около 20 переменных из data.frame. Соглашение об именах переменных часто не является интуитивным, особенно если вы унаследовали набор данных от кого-то другого, поэтому вам может быть интересно, была ли переменная Gender
, Gender
, sex
, Gender
, gender1
и т.д.
Умножьте это на 20 переменных, которые нужно извлечь, и задача запоминания имен переменных становится более сложной, чем это должно быть.
Конкретный пример
Чтобы сделать следующее обсуждение конкретным, я использую bfi
data.frame в пакете psych
.
library(psych)
data(bfi)
df <- bfi
head(df, 1)
A1 A2 A3 A4 A5 C1 C2 C3 C4 C5 E1 E2 E3 E4 E5 N1 N2 N3 N4 N5 O1 O2 O3 O4
61617 2 4 3 4 4 2 3 3 4 4 3 3 3 4 4 3 4 2 2 3 3 6 3 4
O5 gender education age
61617 3 1 NA 16
- Как я могу эффективно выбрать произвольный набор переменных, который для конкретности я выберу
A1, A2, A3, A5, C2, C3, C5, E2, E3, gender, education, age
?
Моя текущая стратегия
В настоящее время у меня есть ряд стратегий, которые я использую.
Конечно, иногда я могу использовать такие вещи, как числовая позиция переменных или соглашение об именах, и использовать либо grep
для выбора, либо paste
для построения. Но иногда мне нужно более общее решение. Я использовал следующее:
1. имена (ДФ)
В первые дни я использовал для вызова names(df)
, скопировал имена цитируемых переменных и затем отредактировал, пока у меня не будет того, что я хочу.
2. Использовать базу данных
Иногда у меня будет отдельный data.frame, который хранит каждую переменную в виде строки и имеет столбцы для имен переменных, метки переменных, и у нее есть столбец, который указывает, следует ли сохранить переменную для конкретного анализа. Затем я могу фильтровать эту переменную include
и извлекать вектор имен переменных. Я считаю это особенно полезным, когда я разрабатываю психологический тест и для различных итераций, которые я хочу включить или исключить определенные элементы.
3. dput (имена (ДФ))
Как Хэдли Уикхем однажды указал мне dput
- хороший вариант; например, dput(names(df))
лучше, чем names(df)
, поскольку он выводит список, который уже находится в формате c("var1", "var2", ...)
:
dput(names(df))
c("A1", "A2", "A3", "A4", "A5", "C1", "C2", "C3", "C4", "C5",
"E1", "E2", "E3", "E4", "E5", "N1", "N2", "N3", "N4", "N5", "O1",
"O2", "O3", "O4", "O5", "gender", "education", "age")
Затем это можно скопировать в script и отредактировать.
Но может ли он быть более эффективным
Я думаю, dput
- довольно хорошая стратегия выбора переменных. Эффективность процесса во многом зависит от того, насколько вы умеете копировать текст в свой script, а затем редактируете список имен до желаемых.
Тем не менее, я до сих пор помню эффективность графических систем выбора переменных.
Например, в SPSS, когда вы взаимодействуете с диалоговым окном, вы можете указать и щелкнуть мышью переменные, которые вы хотите получить из набора данных. Вы можете щелкнуть мышью, чтобы выбрать диапазон переменных, вы можете удерживать shift и нажимать клавишу "вниз", чтобы выбрать одну или несколько переменных, и так далее. И затем вы можете нажать paste
, а команда с выделенными именами переменных вставляется в ваш редактор script.
Итак, наконец, основной вопрос
- Есть ли простое графическое устройство без излишеств, которое позволяет выбирать переменные из data.frame(например, что-то вроде
guiselect(df)
открывает окно gui для выбора переменной) и возвращает вектор выбранных имен переменныхc("var1", "var2", ...)
? - Является ли
dput
лучшим общим вариантом для выбора набора имен переменных в R? Или есть лучший способ?
Обновление (апрель 2017 года): Я опубликовал свое собственное понимание хорошей стратегии ниже.