python - 如何将具有类似名称的列数据分组以查找总和、最小值和最大值?
问题描述
我正在导入一个包含转置数据的 csv 文件。数据具有以下格式的列:AC1,AC2,AD1,AD2,BP1,BP2,CT1,CO1,CO2,CS1等
我一直希望完成的是分组并找到每个 LIKE 列标题的 SUM 以及每个新分组列的最小值和最大值。
示例是:
AC1+AC2 = AC(sum), min, max
AD1+AD2 = AD(sum), min, max
BP1+BP2 = BP(sum), min, max
只要最终结果有效,格式和结构就无关紧要。
这是否可行,或者是否有更好的方法可以实现这一目标?
我已经通过 Excel 使用了宏,仍然需要一些手动操作来对数据等进行分组。
解决方案
假设所有列名都遵循示例中的模式 - 字母的公共前缀后跟数字 - 您可以使用这种方法。
示例数据:
set.seed(1001)
df1 <- data.frame(AC1 = sample(1:100, 50, replace = TRUE),
AC2 = sample(1:100, 50, replace = TRUE),
AD1 = sample(1:100, 50, replace = TRUE),
AD2 = sample(1:100, 50, replace = TRUE),
BP1 = sample(1:100, 50, replace = TRUE),
BP2 = sample(1:100, 50, replace = TRUE)
)
代码。通过从变量名称中删除数字来创建一个要分组的新变量:
library(tidyr)
library(dplyr)
df1 %>%
gather(Var, Val) %>%
mutate(Var2 = gsub("\\d+", "", Var)) %>%
group_by(Var2) %>%
summarise(Sum = sum(Val, na.rm = TRUE),
Min = min(Val, na.rm = TRUE),
Max = max(Val, na.rm = TRUE))
结果:
# A tibble: 3 x 4
Var2 Sum Min Max
<chr> <int> <int> <int>
1 AC 4846 1 100
2 AD 4924 4 96
3 BP 5000 1 100
推荐阅读
- vue.js - 如何显示从指定行开始的 PrimeVue DataTable?
- c++ - 找不到 Visual Studio 2019 代码运行器
- powershell - 什么是 Add-Type vs 方括号?
- git - 在将新项目提交到 git hub 时出现错误:src refspec main 不匹配任何
- android - Android - 如何制作像纸标签一样的内圆角?
- lightbox - 单击灯箱从指定文件夹中提取图像
- python - DetailView + 输入按钮
- reactjs - 为什么我的 Cart.js 没有呈现?反应路由器
- docker - Docker Engine API - 映射到主机上的随机端口
- python - 如何在 django-allauth 用户模型中添加更多字段?