r - 使用特定标准在 R 中保留一行并丢弃其他行?
问题描述
我正在使用下面的数据框,它只是完整数据的一部分,我需要将 id 列中的重复数字压缩成一行。我想保留具有最高 sbp 编号的行,除非它是 300 或更大,在这种情况下我也想丢弃它。
例如,对于 id 为 13480 的前三行,我想保留 124 的行并丢弃另外两行。
id,sex,visits,sbp
13480,M,2,124
13480,M,3,306
13480,M,4,116
13520,M,2,124
13520,M,3,116
13520,M,4,120
13580,M,2,NA
13580,M,3,124
这是我得到的最远的地方,一直在尝试调整它,但不确定我是否走在正确的轨道上:
maxsbp <- split(sbp, sbp$sbp)
r <- data.frame()
for (i in 1:length(maxsbp)){
one <- maxsbp[[i]]
index <- which(one$sbp == max(one$sbp))
select <- one[index,]
r <- rbind(r, select)
}
r1 <- r[!(sbp$sbp>=300),]
r1
解决方案
我认为一个整洁的解决方案会很好地工作。如果您不想保留任何高于该阈值的值,我将首先过滤所有高于 300 的值。然后group_by id,order,并保持第一个。
my.df <- data.frame("id" = c(13480,13480,13480,13520,13520,13520,13580,13580),
"sex" = c("M","M","M","M","M","M","M","M"),
"sbp"= c(124,306,116,124,116,120,NA,124))
my.df %>% filter(sbp < 300) # filter to retain only values below 300
%>% group_by(id) # group by id
%>% arrange(-sbp) # arrange by id in descending order
%>% top_n(1, sbp) # retain first value i.e. the largest
# A tibble: 3 x 3
# Groups: id [3]
# id sex sbp
# <dbl> <chr> <dbl>
#1 13480 M 124
#2 13520 M 124
#3 13580 M 124
推荐阅读
- oracle - 如何获得像 user_objects 这样的系统视图的完整定义 (sql)?
- ffmpeg - 当视频和音频过滤器一起使用时,FFmpeg 会发出警告
- android - 当我仅第一次从图库或相机中选择图像时,片段被破坏
- python - 在 django 中只显示 3 条记录而不是全部
- node.js - 有没有办法使用 websoket 重载 Node.js 事件循环
- mysql - 将 csv 文件导入 mysql 数据库时出现错误 1406
- android - FOREIGN KEY 约束失败(代码 787 SQLITE_CONSTRAINT_FOREIGNKEY)
- azure - 使用 Azure 数据工厂将数据导出到 csv 文件时从列中删除多余的逗号
- javascript - 获取未定义的错误嵌套javascript过滤器属性“过滤器”
- bash - 在分层目录结构中使用 bash 循环和 AWK 计算和提取结果的脚本