首页 > 解决方案 > 如何在 R 例如 5-10 的列中对范围内的值进行分组?

问题描述

我是 R 新手,我试图在数据框中显示数据,使其格式为 5-10。这是我拥有的示例数据:

数数 百分比
1 0.1
1 0.1
3 0.3
5 0.5

我希望输出数据看起来像这样

数数 百分比
1-2 0.1
3-4 0.3
5 0.5

计数列值是因子类型。

这是我到目前为止所拥有的,但它不起作用。我尝试一次比较两个值,然后如果差异不是 1,那么我想将其作为字符输出为 1-2:

count <- factor(c(1,1,3,5))
percentage <- c(0.1, 0.1,0.3,0.5)

info <- data.frame(count, percentage)
str(info)
hits <-as.numeric(as.character(info$count))
hits

for(i in hits){
  #print(i)
  if(hits[i+1] - hits[i] != 1){
    df[i]=as.character(i) + '-' + hits[i+1] - 1
  }
}

标签: r

解决方案


在 R 中组合因子水平非常容易。我将使用比您提供的稍大的样本:

set.seed(42)
count <- factor(sample.int(5, 20, replace=TRUE))
pct <- round(pct/sum(pct), 4) * 100
levels(count)
# [1] "1" "2" "3" "4" "5"

现在要组合你只需要一行的关卡:

levels(count) <- c("1-2", "1-2", "3-4", "3-4", "5")
levels(count)
# [1] "1-2" "3-4" "5"  

现在创建摘要数据框:

info <- data.frame(count, pct)    
Freq <- tapply(info$count, info$count, length)
Sum <- tapply(info$pct, info$count, sum)
info.df <- data.frame(Freq, Sum)
info.df
#     Freq   Sum
# 1-2   12 59.22
# 3-4    6 29.13
# 5      2 11.66

推荐阅读