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

R脚本中summary输出格式不一致,如何实现统一?

问题:如何让R中summary()输出数值统计而非频数分布?

原始代码

data <- read.csv(args[1]);
s <- summary(data$Latency);
cpuIdle <- read.csv(args[2]);
cpuBusy <- sapply(cpuIdle$value, function(x) { 100-x; });
cpuSum <- summary(cpuBusy);
print(cpuSum);
print(s);

现象描述

  • cpuSum输出符合预期的数值统计:
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   3.00    9.50   15.00   13.18   18.00   18.00 
  • s却输出频数统计(不符合预期):
1       0       3       2       4       5       6       7       8       9 
1028641  860772  486388  407815  367286  220960  111822   47377   19483   10219 
     10      11      12      13      14      15      31      30      29      28 
   6666    4460    3081    2181    1523    1077     940     918     914     893 
     33      32      27      26      34      16      35      36      25      37 
    888     886     858     786     786     771     700     679     671     621 
     17      24      38      39      23      40      18      41      19      22 
    570     563     490     457     436     428     410     370     326     304 
     21      20      42      43      44      45      46      47      48      50 
    303     286     270     269     214     185     159     133     117     105 
     49      51      52      54      53      55      57      56      81      82 
    103      75      65      54      53      39      38      34      29      28 
    207      86     206      79      78      59      80      64      83      85 
     27      27      26      25      23      22      21      20      18      18 
     60      63      73      84      87     205      58      72      75      76 
     17      17      17      17      17      16      16      16      16      15 
     88      89      91     204     208      61      62      69      94      66 
     15      15      15      14      14      14      14      14      13      12 
     92      67     102      70      77      93      95      65      90 (Other) 
     12      11      10      10      10      10      10       9       9     213

数据样本

  • Latency对应数据文件前几行:
elapsed,label,success,Latency
103,request,true,102
120,request,true,117
104,request,true,102
104,request,true,102
127,request,true,122
3,request,true,1
3,request,true,3
111,request,true,102
4,request,true,3
  • cpuIdle对应数据文件前几行:
timestamp,value
1684166631,96
1684166642,96
1684166652,96
1684166662,96
1684166672,96
1684166682,97
1684166692,97
  • 使用R版本:3.5.2 (2018-12-20)

问题原因

summary()函数的输出格式由输入变量类型决定:

  • 输入为**数值型(numeric/integer)**时,输出最小值、四分位数、均值、最大值等统计量;
  • 输入为**因子(factor)或字符型(character)**时,输出各水平的频数分布。

你的data$Latency被识别为因子/字符型而非数值型,导致输出频数统计。这通常是因为数据文件中Latency列存在非数值内容(如特殊字符、空值),或read.csv读取时自动将其转换为因子。

解决方案

将data$Latency转换为数值型后再计算summary:

修改后的代码

data <- read.csv(args[1]);
# 先转字符再转数值,避免因子转数值时的编码问题
latency_num <- as.numeric(as.character(data$Latency))
s <- summary(latency_num);
cpuIdle <- read.csv(args[2]);
cpuBusy <- sapply(cpuIdle$value, function(x) { 100-x; });
cpuSum <- summary(cpuBusy);
print(cpuSum);
print(s);

补充优化

  1. 若转换时出现非数值内容导致的警告,可在计算summary时忽略缺失值:
s <- summary(latency_num, na.rm = TRUE);
  1. 也可在读取数据时直接指定Latency列为数值型,提前规避类型问题(若数据中存在非数值会直接报错,适合确认数据全为数值的场景):
data <- read.csv(args[1], colClasses = c(Latency = "numeric"));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:07:15