Я хотел бы изменить вывод порядка столбцов из табличной функции в р. Я могу найти только информацию об изменении порядка столбцов для data.table (а не то, что мне нужно). Порядок столбцов («Нет» и «Да») всегда был постоянным, когда я использовал R (в алфавитном порядке?), Но по какой-то причине некоторые из моих таблиц возвращались в другом порядке («Да» и «Нет» "). Мне нужно, чтобы они были последовательными (так как я объединяю несколько таблиц) и упорядочены так, чтобы «Да» было последним. Я делаю несколько сотен этих таблиц со связанной статистикой и имею несколько индивидуальных формул, которые могут мне помочь, но я не могу позволить себе дважды проверять порядок каждой таблицы, поэтому я хочу сказать р, что конкретно нужно делать. Поскольку я выполняю тесты хи-квадрат, я не хочу превращать каждую таблицу в data.frame, переупорядочивать столбцы, а затем каким-то образом возвращаться к таблице. Порядок столбцов в таблице важен, поскольку я комбинирую некоторые таблицы (а R неправильно их приводит), а также делаю отношения шансов, поэтому мне нужно, чтобы «Да» всегда приходило последним. Из любопытства (необязательно) кто-нибудь мог бы объяснить мне, почему некоторые из моих данных создают столбцы таблицы в алфавитном порядке, а другие - нет. Я приложил упрощенную версию своих данных.
df <- data.frame(treatment = c("A","A","B","A","B","A","B","B"),
symptom = c("Yes","Yes","No","No","Yes","Yes","Yes","No"))
table(df)
Поскольку в этом примере получается желаемый порядок столбцов в таблице, напишите код, чтобы изменить порядок столбцов с «Нет», «Да» на «Да», «Нет».
Мы можем использовать factor
с указанным levels
, потому что order
ing основан на алфавитном порядке, где «N» стоит перед «Y» (первая буква и т. д.). Это можно изменить путем преобразования в factor
с помощью levels
в индивидуальном порядке.
table(df$treatment, factor(df$symptom, levels = c("Yes", "No")))
# Yes No
# A 3 1
# B 2 2
Или используйте transform
, а затем сделайте table
table(transform(df, symptom = factor(symptom, levels = c("Yes", "No"))))
# symptom
#treatment Yes No
# A 3 1
# B 2 2
Однако мы можем сделать это после table
, указав порядок (либо индекс столбца, либо имена столбцов), но это станет более утомительным, если мы не будем знать, какие уровни
table(df)[, 2:1]
# symptom
#treatment Yes No
# A 3 1
# B 2 2
@ Snipper03 Непонятно, что вы имели ввиду под Doesn't work
?
Ваши первая и вторая рекомендации сработали для моего примера, но только ваша первая рекомендация сработала для моих фактических данных (по какой-то причине). Но это все, что мне нужно. Спасибо за ясность, за несколько вариантов и за то, что не слишком усложняете ситуацию.
Вы можете заказать его так, как хотите:
table(df)[,2:1]
symptom
treatment Yes No
A 3 1
B 2 2
table(df)[,c("Yes","No")]
symptom
treatment Yes No
A 3 1
B 2 2
levels=c("Yes","No")
table(df)[,levels]
symptom
treatment Yes No
A 3 1
B 2 2
@ Snipper03 У меня действительно работает. ОП попросил изменить порядок имен с «Нет», «Да» на «Да», «Нет».