Коэффициенты доступа по их базовому целому числу, а не их уровню в R - PullRequest
0 голосов
/ 08 мая 2020

У меня часто есть факторные переменные с длинным текстом в качестве уровней (например, ответы в опросе: «Я полностью согласен с утверждением» может быть одним уровнем). Если я хочу выделить подмножество на основе факторной переменной, всегда неприятно вводить полный уровень. Я бы предпочел иметь обзор сопоставления базового целого числа с уровнем и доступа на основе этого целого числа.

set.seed(1896)
df <- data.frame(y = runif(100, 0, 10000), x = factor(rep(c("I strongly agree", "I agree", "I disagree", "I strongly disagree"), 25)))
mean(df$y[df$x == "I strongly agree"])

Можно получить тот же результат, обратившись к базовому целому числу через: *

У меня два связанных вопроса: 1) Есть ли лучший / более безопасный способ сделать это? В Stata со значениями и метками значений можно получить доступ либо к метке, либо к значению напрямую, существует ли что-то подобное в R? 2) Есть ли способ быстро просмотреть таблицу с отображением целого числа на факторный уровень в R? Команда, которая выдала бы мне такую ​​таблицу: 1 - «Согласен»; 2 - «Не согласен»; 3 - «Полностью согласен»; 4 - «Совершенно не согласен»?

Заранее спасибо!

1 Ответ

2 голосов
/ 08 мая 2020

Не очень уверен в вашем вопросе, так как никогда не использовал Stata. Самый важный шаг - это факторинговая часть. По умолчанию уровни отсортированы по алфавиту.

df = data.frame(y = runif(100, 0, 10000), x = rep(c("I strongly agree", "I agree", "I disagree", "I strongly disagree"), 25))

levels(df$x)
[1] "I agree"             "I disagree"          "I strongly agree"   
[4] "I strongly disagree"

На всякий случай, я предполагаю, вы имеете в виду определение одинаковых уровней для каждого набора данных. Итак, вы можете сделать:

lvls = c("I strongly agree", "I agree", "I disagree", "I strongly disagree")
df$x = factor(df$x,levels=lvl)

levels(df$x)
[1] "I strongly agree"    "I agree"             "I disagree"         
[4] "I strongly disagree"

Итак, для таблицы может быть что-то вроде:

data.frame(num = 1:length(lvl),lvl)
  num                 lvl
1  1    I strongly agree
2  2             I agree
3  3          I disagree
4  4 I strongly disagree

И вы можете подмножество, используя:

df[df$x==lvl[1],]

Или:

df[df$x==levels(df$x)[1],]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...