Перебирать имена переменных в R

У меня есть потенциально очень глупый вопрос, но я не могу найти решение легко. И я довольно новичок в R, поэтому, пожалуйста, простите мое невежество.

Я ищу способ перебрать все переменные в моем кадре данных. Например, чтобы сделать двусторонние таблицы всех переменных по сравнению с одной конкретной переменной (скажем, пол или уровень образования). Раньше я работал со Stata, но, поскольку R бесплатен, теперь я должен работать с R (я слышал, что в работе с R есть множество других преимуществ, поэтому я очень хочу учиться :)).

Скажем, у меня есть 20 переменных, из которых 15 — ответы из опроса, а 5 — демографические переменные. Я хотел бы посмотреть, как разные ответы соотносятся с различиями в демографии.

Обычно я бы решал описанную выше проблему в Stata с помощью чего-то простого, например:

for i = 1 to 5 {
    for j = 1 to 3 {
        tab Sex Var`i'_`j', chi2
    }
}

создание 15 таблиц для переменных от Var1_1 до Var5_3 vs Sex и предоставление статистики Pearson chi2.

Итак, я попробовал то же самое для R:

for (i in 1:5) {
  for (j in 1:3){
  print(table(chisq.test(paste(df$Sex, "df$Var",i,"_",j,sep=""))))    
  }
}

но это не работает.

Может ли кто-нибудь указать мне в правильном направлении, как решить эту проблему? Любая помощь высоко ценится!


person Eelco    schedule 02.10.2019    source источник
comment
Вы можете использовать summary(df) или lapply(df, table), где первый даст вам сводку data.frame, где числовые переменные суммируются с минимальными, максимальными, средними, медианными и категориальными (факторными) переменными с таблицей. Второй дает вам список таблиц ваших переменных.   -  person kath    schedule 02.10.2019
comment
Вам действительно нужно изучить help("$). Это объясняет, когда вы можете использовать $ и когда вместо этого использовать [] и [[]]. В общем, подходы, которые хорошо работают на одном языке, не обязательно хорошо переносятся на другой язык. Это такой случай.   -  person Roland    schedule 02.10.2019
comment
Спасибо, я прочитаю об этом и попробую еще раз. Я также немного отредактировал свой вопрос, так как мой пример кажется плохо выбранным (учитывая, как первый комментарий отвечает, как добиться аналогичных результатов другим способом)   -  person Eelco    schedule 02.10.2019


Ответы (1)


Предположим, что df — это ваши данные, а первые 15 столбцов — это ответы. В этом случае вы можете использовать это

lapply(df[,1:15], function(x) {chisq.test(x, df$Sex)}) 
person Yuriy Barvinchenko    schedule 02.10.2019