Как запустить таблицу частот в R для набора переменных, как вы бы сказали, ЧАСТОТЫ var1 TO var10 в SPSS? - PullRequest
1 голос
/ 03 мая 2019

Я пытаюсь запустить набор частотных таблиц в R без необходимости писать код для каждой переменной.Например, используя данные mtcars в SPSS, я бы что-то вроде:

FREQUENCIES mpg TO vs 

И это дало бы мне 8 частотных таблиц для переменных между mpg и vs.. Я пытаюсь получить этот эффект вR с использованием функции summarytools freq или функции sjPlot view_df.Я могу сделать это, используя freq, но вы должны перечислить имена всех переменных вместо использования команды, такой как TO.И я могу сделать это, используя view_df, но вы должны знать положения столбцов переменных (у меня есть тысячи переменных, так что это не сработает).Пожалуйста, посмотрите на то, что у меня есть ниже.

#####USING FREQ IN SUMMARY TOOLS
library(summarytools)

freq(mtcars[ ,c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs")])  #works fine, but I don't want to have to list the names of all of the variables 

#####USING VIEW_DF IN SJPLOT
library(sjPlot)
view_df(mtcars[, c(1:8)],     #I want to be able to say c(mpg:vs)
        show.na = TRUE, 
        show.type = TRUE, 
        show.frq = TRUE, 
        show.prc = TRUE, 
        show.string.values = TRUE, 
        show.id = TRUE)

####A FEW EXTRA STEPS USING THE EXPSS PACKAGE

Я знаю, что вы можете использовать %to% в пакете expss.У меня есть мои собственные данные и имена переменных, извините!

# table with counts
counts = calculate(olbm_na_A, cro(mdset(S06_01_NA %to% S06_99_NA), list("Count")))

# table with percents
percents = calculate(olbm_na_A, cro_cpct(mdset(S06_01_NA %to% S06_99_NA), list("Column, %")))

# combine tables
expss_output_viewer() 
(counts %merge% percents)

Я ожидаю, что он распечатает последовательность таблиц частот.Я хочу иметь возможность использовать некоторые команды, которые в основном означают от var1 до var10.Я не могу понять, как сделать эту команду TO.Я ожидаю, что это зависит от того, какой пакет вы используете.

Ответы [ 3 ]

0 голосов
/ 03 мая 2019

В пакете expss есть функция fre:

library(expss)
data(mtcars)
mtcars = apply_labels(mtcars,
                      mpg = "Miles/(US) gallon",
                      cyl = "Number of cylinders",
                      disp = "Displacement (cu.in.)",
                      hp = "Gross horsepower",
                      drat = "Rear axle ratio",
                      wt = "Weight (lb/1000)",
                      qsec = "1/4 mile time",
                      vs = "Engine",
                      vs = c("V-engine" = 0,
                             "Straight engine" = 1),
                      am = "Transmission",
                      am = c("Automatic" = 0,
                             "Manual"=1),
                      gear = "Number of forward gears",
                      carb = "Number of carburetors"
)

# as.list is needed to process data.frame as several variables rather than multiple response
calculate(mtcars, fre(as.list(vs %to% carb)))

В общем, вы можете использовать %to% внутри calculate с любой другой функцией из любого пакета.%to% просто возвращает data.frame, например, vs %to% carb идентичен mtcars[, c("vs", "am", "gear", "carb")].

Пример с sjPlot:

library(sjPlot)
calc(mtcars, view_df(vs %to% carb))
0 голосов
/ 06 мая 2019

Таблицу частот в стиле SPSS, от A до B, довольно легко выполнить, используя sjmisc-package :

library(sjmisc)
frq(mtcars, mpg:vs)
# output in browser, to copy/paste to Word
frq(mtcars, mpg:vs, out = "b")

См. ?frq для примеров и различных опций для выбора переменных, вычисления частот в сгруппированных фреймах данных, группировки переменных со многими уникальными значениями и т. Д. И frq() также работает с помеченными данными (см. Некоторые примеры в этой виньетке ).

sjPlot::view_df() создает кодовый план и немного перегружен для простых таблиц частот, хотя вы также можете показывать частоты. В недавнем блоге 1016 * приведены примеры.

0 голосов
/ 03 мая 2019

Я думаю, что самый простой способ сделать это - использовать grep и colnames, чтобы вернуть индекс столбца переменных по имени.

grep("mpg", colnames(mtcars)) : grep("vs", colnames(mtcars)) 

превращается в c(1:8), сначала находя позицию "mpg" в именах столбцов mtcars (которая равна 1), а затем позицию "vs" (которая равна 8). Затем вы можете использовать ваши решения view_df или freq, как показано ниже, или есть много других способов применить это.

freq(mtcars[grep("mpg", colnames(mtcars)) : grep("vs", colnames(mtcars)), ]) 

view_df(mtcars[, grep("mpg", colnames(mtcars)) : grep("vs", colnames(mtcars))],     #I want to be able to say c(mpg:vs)
        show.na = TRUE, 
        show.type = TRUE, 
        show.frq = TRUE, 
        show.prc = TRUE, 
        show.string.values = TRUE, 
        show.id = TRUE)
...