r - 仅取 R 中数据框所有列的重复 ID 的最大值
问题描述
我有 24525 行和 22 列的数据框。最后一列是 ID 列,其他是数字。唯一 ID 的数量为 18414,并且某些 ID 重复了 2 次以上。
我需要删除重复的 ID,并只保留另一个数据框中每个 ID 和每一列的最大值。
我尝试在 for 循环中对每一列进行排序并删除重复项以保持最大值,但它不起作用,我不确定。
有谁知道完成这项任务的方法?
先感谢您
解决方案
假数据:
mt <- mtcars
mt$cyl <- as.character(mt$cyl)
碱基R
aggregate(. ~ cyl, data = mt, FUN = max)
# cyl mpg disp hp drat wt qsec vs am gear carb
# 1 4 33.9 146.7 113 4.93 3.190 22.90 1 1 5 2
# 2 6 21.4 258.0 175 3.92 3.460 20.22 1 1 5 6
# 3 8 19.2 472.0 335 4.22 5.424 18.00 0 1 5 8
(感谢@GregorThomas 对此的调整。)
tidyverse
library(dplyr)
mt %>%
group_by(cyl) %>%
summarize_all(max)
# # A tibble: 3 x 11
# cyl mpg disp hp drat wt qsec vs am gear carb
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 4 33.9 147. 113 4.93 3.19 22.9 1 1 5 2
# 2 6 21.4 258 175 3.92 3.46 20.2 1 1 5 6
# 3 8 19.2 472 335 4.22 5.42 18 0 1 5 8
更新:正如@akrun 所建议的,dplyr::summarize_all
已被取代。来自?summarize_all
:
范围动词(
_if
,_at
,_all
)已被across()
现有动词中的使用所取代。详情请参阅vignette("colwise")
。
更新代码:
mt %>%
group_by(cyl) %>%
summarize(across(everything(), max))
# # A tibble: 3 x 11
# cyl mpg disp hp drat wt qsec vs am gear carb
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 4 33.9 147. 113 4.93 3.19 22.9 1 1 5 2
# 2 6 21.4 258 175 3.92 3.46 20.2 1 1 5 6
# 3 8 19.2 472 335 4.22 5.42 18 0 1 5 8
数据表
library(data.table)
setDT(mt)
mt[, lapply(.SD, max), by=.(cyl)]
推荐阅读
- ios - dyld:库未加载:@rpath/libswiftCore.dylib - Ionic | Razorpay 科尔多瓦
- angularjs - “堆栈空间不足”使用 IE11、angularjs 和 highcharts-ng 插件
- variables - 时间扭曲变量初始化?
- git - git checkout remotes/origin/branch 和 git checkout branch 有什么区别?
- google-sheets - Google Spreasheet:将两列中的唯一值合并为一列
- symfony - Twig3:如何使用循环 bariable 迁移“for item in items if item.foo == 'bar'”
- javascript - 在 Dojo 中创建自定义小部件时遇到错误,无法确定错误原因
- python - Python,递归:给出满足布尔表达式的所有可能的元组组合
- python - 使用 Python 更新 JSON 文件并保持原始格式
- kdb - 从 kdb 中的字符串列表中删除空字符串