r - 如何在 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 中组合因子水平非常容易。我将使用比您提供的稍大的样本:
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
推荐阅读
- sql - ORDER BY 多列
- ruby - 安装 thor (0.20.3) 时中间人权限被拒绝,并且 Bundler 无法继续
- jquery - 如何让 jQuery 幻灯片功能停止移动我的其他 div 元素?
- python - Python:如何匹配已知字符,然后使用正则表达式从字符串中改变数字并创建平均结果?
- express - 使用“表单数据”提交数据时请求正文为空
- nginx - OpenResty:匿名查询参数
- sql-server - 将 IIF() 和 datepart 访问语句转换为 SQL Server
- django - 如何将 css 应用于 Django 模板中的三级递归 mptt 树?
- unicode - html页面中的Unicode字符
- .htaccess - 使用 phpmvc 时,url 将 www 重写为非 www 并删除参数 index.php?url