You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中对dataP数据框指定列按从小到大排序

需求

需要对表格中的变量X以及Y\X=8对应的变量值按从低到高重新排序,最终排序后的变量值需为:6、8、9、10。

生成目标表格dataP的代码
lim <- sample(2:10, 4)

lim1 <- sample(3:10, 4)

create_table <- function() {
  n_a <- sample(10:25,1)
  n_b <- 30-n_a
  n_c <- sample(5:18,1)
  n_d <- 20-n_c
  P3 <- rmultinom(1, n_a, prob=c(0.2, 0.4, 0.3, 0.1))
  P4 <- rmultinom(1, n_b, prob=c(0.1, 0.2, 0.4, 0.3))
  P5 <- rmultinom(1, n_a, prob=c(0.2, 0.4, 0.3, 0.1))
  P6 <- rmultinom(1, n_b, prob=c(0.1, 0.2, 0.4, 0.3))
  matrix(c(P3, P4, P5, P6), nrow = 4, ncol = 4,
          dimnames = list(c(lim[1], lim[2] ,lim[3],lim[4]),
           c(lim1[1] ,lim1[2], lim1[3], lim1[4])))
}

public <- create_table()

r <- sample(1:4,1)

dataP <- data.frame(c(lim1[1], lim1[2], lim1[3], lim1[4], "Suma"), 
            c(public[r,1], public[r,2], public[r,3], public[r,4],public[r,1]+ public[r,2]+ public[r,3]+public[r,4]))

colnames (dataP) <-lapply(list( "Y\\X={states[[1]][r]}","n[i/j == paste( {ansord})]" ),glue)
尝试的排序代码
dataP[order(suppressWarnings(as.numeric(dataP$`X\\Y=`)), na.last = TRUE),]
修正后的解决方案

你的尝试存在两个核心问题:一是列名引用错误(实际列名是Y\\X={...}而非X\\Y=),二是没有按指定的目标顺序(6、8、9、10)精准排序,同时未妥善处理汇总行"Suma"。

以下是精准匹配目标顺序的排序代码:

# 提取汇总行
suma_row <- dataP[dataP[[1]] == "Suma", ]
# 按目标顺序匹配行,生成排序后的主体行
sorted_main <- dataP[match(c(6, 8, 9, 10), dataP[[1]]), ]
# 拼接主体行与汇总行,得到最终排序后的表格
dataP_sorted <- rbind(sorted_main, suma_row)

关键说明

  • match(c(6,8,9,10), dataP[[1]]):直接根据你指定的目标顺序,在表格第一列中匹配对应值的行索引,确保排序结果严格符合要求
  • 单独提取并保留"Suma"行在末尾,避免排序逻辑影响汇总数据
  • 无需依赖自动排序函数,直接指定顺序匹配,结果更可控

内容的提问来源于stack exchange,提问作者Amelia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:33:16