R:expss表创建中的有序因子顺序错误

u3r8eeie  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(63)

如果有人能告诉我为什么会发生以下情况,以及如何纠正,我将不胜感激。
我使用expss包创建一个表,如下所示:

table <- dta %>%
        tab_cells(dta[["x"]]) %>%
        tab_rows(factor(dta[["y"]], ordered=TRUE)) %>%
        tab_weight(dta[["weight"]]) %>%
        tab_stat_cpct(total_statistic = "w_cpct") %>%
        tab_pivot() %>%
        split_columns()

字符串
我输入factor(dtay,ordered=TRUE),以便因子在表中排序。对于我的其他变量,这是有效的,但不知何故,不与这个。
如果我只在控制台中输入factor(dtay,ordered=TRUE),它会正确返回

Levels: 537 < 564 < 650 < 1010


然而,如果我使用上面的函数来创建一个数据表,那么不管出于什么原因,它的顺序如下:
1010 537 564 650
我该怎么做才能使它的顺序正确呢?
这是一个重新创建问题的示例数据集:

dta <- data.frame(x = c(1,1,1,2,1,1,1,1,1,1,1,2,1,2,2,2,1,1,2,2),
                  y = c(1010,650,650,537,650,650,650,650,564,650,650,650,564,564,564,564,650,650,564,564),
                  weight = c(42.066290,3.126177,3.808385,4.812877,8.093253,1.559941,6.168395,2.419531,3.937412,4.293246,20.445602,16.504405,1.314727,2.474295,2.274015,2.668155,3.864480,2.521209,2.605202,2.194348))


提前感谢!

vdzxcuhz

vdzxcuhz1#

是的,这是expss中的一个bug。您可以使用排序解决方法,根据数值对表重新排序:

sort_workaround = function(tbl){
    separated_labels = as.data.frame(split_labels(tbl[[1]], remove_repeated = FALSE))
    # [,-ncol(separated_labels)] to keep total position 
    separated_labels = type.convert(separated_labels, as.is = TRUE)[,-ncol(separated_labels)]
    new_order = do.call(order, separated_labels)
    tbl[new_order, ]
}

table <- dta %>%
    tab_cells(x) %>%
    tab_rows(factor(y, ordered=TRUE)) %>%
    tab_weight(weight) %>%
    tab_stat_cpct(total_statistic = "w_cpct") %>%
    tab_pivot() %>% 
    sort_workaround() %>%
    split_columns()

table

字符串

相关问题