Переупорядочить столбец dataframe с помощью factor () и используя переменную из argparse - PullRequest
0 голосов
/ 18 апреля 2019

Я использую библиотеку argparse для создания коробочного графика с библиотекой ggpubr из интерфейса командной строки. Я могу изменить порядок интересующего меня столбца вручную Тем не менее, я хочу изменить порядок столбцов, используя argparse. Я не могу понять, как использовать df $ args $ reorder name.

Каким-то образом мне нужно автоматизировать линию

df$Population <- factor(df$Population, levels = c("Control", "American"))

до

get(args$reorder, df) <- factor(get(args$reorder, df), levels = c(args$new_order))

или

df$args$reorder <- factor(df$args$reorder, levels = c(args$new_order)

Вот код, который я пробовал

#!/usr/local/bin/Rscript

suppressWarnings(library(argparse))
suppressWarnings(library(ggpubr))

parser <- ArgumentParser(description="Tools for making plot from command line") 

parser$add_argument("--file", type="character", help="Input file")
parser$add_argument("--x-ax", type="character", help="x_axis value")
parser$add_argument("--y-ax", type="character", help="y_axis value")
parser$add_argument("--color", type="character", help="color by")
parser$add_argument("--facet-col", type="character", default=NULL, help="facet by")
parser$add_argument("--reorder", type="character", default=NULL, help="reorder a column")
parser$add_argument("--new_order", type="character", default=NULL, help="new orders for the items")

args <- parser$parse_args()

df <- read.csv(args$file)

head(df)
#Population  Diet BloodPressure
#1   American Vegan           167
#2   American Vegan           160
#3   American Vegan           162
#4   American Vegan           165
#5   American Vegan           159
#6   American Vegan           177

#The line below can manually reorder the items in the column.
#df$Population <- factor(df$Population, levels = c("Control", "American"))

# I want to do something like this
#get(args$reorder, df) <- factor(get(args$reorder, df), levels = c(args$new_order))


fig <- ggboxplot(df, x = args$x_ax , y = args$y_ax, 
facet.by = args$facet_col, fill = args$color, palette = "npg")

ggsave("reorder_factor.png")

Данные, которые я использовал, здесь

Перед изменением порядка изображение выглядит следующим образом

и после переупорядочения изображение выглядит следующим образом

1 Ответ

0 голосов
/ 18 апреля 2019

Извините, ребята!Я решил это методом проб и ошибок.

df[[args$reorder]] <- factor(df[[args$reorder]], levels = args$new_order)

Хотя я не знаю, как это работает.Удачного кодирования.

...