R:序数变量的水平/标签和boxplot函数

时间:2015-08-05 12:12:57

标签: r boxplot ordinal

我曾经在数据框中将我的序数数据作为普通数字(即1-3)。这很好,但我必须记住数字代表什么(在我的情况下:1 =低,2 =中,3 =高)。

为了让事情变得更容易,我试图让R以通用方式显示名称/标签而不是1-3,即无论我使用的是桌子,箱子等等。但是,我可以'让这个工作。

我试过

today=`TZ='Asia/Tel_Aviv' date +"%Y-%m-%d"`
yesterday=`TZ='Asia/Tel_Aviv' date +"%Y-%m-%d" -d "yesterday"`

print_test_results()
{
    log_suffix="_${file_name}.log"
    yesterday_logs="${log_prefix}${yesterday}_[1,2]*${log_suffix}"
    today_logs="${log_prefix}${today}_0*${log_suffix}"
    passed_tests=`fgrep -L FAILED $yesterday_logs $today_logs 2>/dev/null | wc -l 2>/dev/null`
    failed_tests=`fgrep -l FAILED $yesterday_logs $today_logs 2>/dev/null | wc -l 2>/dev/null`
    total_tests=`ls -1 $yesterday_logs $today_logs 2>/dev/null | wc -l 2>/dev/null`
    echo "<tr>"
    echo "<td>$test_name - $today</td>"
    if [ $passed_tests = "0" ]; then
        echo "<td>$passed_tests passed</td>"
        echo "<td><span style=\"color: red;\">$failed_tests failed</span></td>"
    else
        echo "<td><span style=\"color: green;\">$passed_tests passed</span></td>"
        echo "<td>$failed_tests failed</td>"
    fi
    echo "<td>$total_tests tests total</td>"
    echo "</tr>"
}

我这样做后,

data$var <- ordered(data$var, 
    levels = c(1, 2, 3), 
    labels = c("Low", "Medium", "High")) 

不再起作用了。为什么不呢?

2 个答案:

答案 0 :(得分:2)

该命令不起作用,因为boxplot期望第一个参数(x参数)是数字。

如果您只是寻找一个简单的解决方案,您可以简单地将数据绘制为整数(因为您的因子是有序的,因此它们将按正确的整数顺序)抑制原始轴并添加一个新的使用右轴标签。

boxplot(as.integer(data$var), yaxt = "n")
axis(2, at = c(1, 2, 3), labels = c("Low", "Medium", "High"))

答案 1 :(得分:0)

假设您要绘制的自变量已经是一个因子,这里是重新排序关卡和标签的一般方法:

# Let's say you have a factor in the default alphabetical order

my.fac <- factor(LETTERS[1:3])
str(my.fac)

# Now you want to reorder it arbitrarily:

levels(my.fac) <- list(A = "A", C = "C", B = "B")
str(my.fac) # they have been reordered

# You can also use this method to rename the levels,
# with or w/o changing the order:

levels(my.fac) <- list("Low" = "A", "Med" = "B", "High" = "C")
str(my.fac)

# The general format is list("new" = "old")

如果您的原始数据不是一个因素,那么您可以首先强制使用as.factor