我有一个数据集,包括ID,时间,年龄,v1,v2,v3等几个变量。 我需要替换重复的行(条件ID和时间);对于具有相同ID和时间的行,获取每个变量的最大值并将其替换为数据集(我需要保留所有重复行)。任何意见,将不胜感激。R中重复行的最大值
-1
A
回答
1
我的例子只有v1和v2,但你的想法...
> head(d)
ID Time Age v1 v2
1 a 1 11 12 13
2 a 1 21 12 53
3 a 1 11 42 43
4 b 1 4 6 7
5 b 2 1 2 3
这里我们会汇总得到最大
> agg = aggregate(
list(Age=d$Age,v1=d$v1,v2=d$v2),
by=list(ID=d$ID,Time=d$Time),
FUN=max
)
> head(agg)
ID Time Age v1 v2
1 a 1 21 42 53
2 b 1 4 6 7
3 b 2 1 2 3
现在我们合并,与前两列我们的原始数据的
> merge(d[,c(1,2)],agg,by=c("ID","Time"))
ID Time Age v1 v2
1 a 1 21 42 53
2 a 1 21 42 53
3 a 1 21 42 53
4 b 1 4 6 7
5 b 2 1 2 3
+0
我喜欢这个概念,但你也许可以把它简化一点:'合并(DAT [C(” ID“,”Time“)],aggregate(。〜ID + Time,data = dat,FUN = max))' – thelatemail
2
使用dplyr
library(dplyr)
your_data %>%
group_by(ID, time) %>%
mutate_each(funs = funs(max)))
如果你有NA值,尝试
your_data %>%
group_by(ID, time) %>%
mutate_each(funs = funs(max(., na.rm = T)))
快乐,以测试提供的任何数据/演示。
+0
我必须更新我的包......找不到'%>%'非常好。 – Larsenal
0
使用ave
另一种选择,适用于@ Larsenal的示例数据:
idvars <- c("ID","Time")
numvars <- setdiff(names(dat), idvars)
dat[numvars] <- lapply(dat[numvars], function(x) ave(x, dat[idvars], FUN=max))
# ID Time Age v1 v2
#1 a 1 21 42 53
#2 a 1 21 42 53
#3 a 1 21 42 53
#4 b 1 4 6 7
#5 b 2 1 2 3
相关问题
- 1. 索引R中重复最大值的最大值
- 2. 排除重复最大值R中
- 3. 找到R中每行最大最大值和第二大最大值R
- 4. 在Excel中最大的条件语句重复的最大值
- 5. 取其中有一列的最大值的行 - 与重复
- 6. 显示重复的最大值
- 7. 增加重复元素的最大值
- 8. R,因子的最大值
- 9. 比较R中的组中的最大值和最小值
- 10. 最长最大重复子
- 11. 顶部/最大值在R
- 12. 查找重复行,最大数据
- 13. R选择重复的行
- 14. 确定哪些值中的R重复
- 15. 与R中重复的x值绘制
- 16. SQL,如何删除重复行并找到最小值(timeIn)和最大值(timeOut)
- 17. 行中的MySQL最大值
- 18. 在R中使用data.table选择重复组的最近行数
- 19. 删除重复的值的行的所有副本中的R
- 20. 意味着排除最大值和最小值中的R
- 21. 组织有最大值和最小值的数据r中
- 22. 按R中的中值折叠重复行
- 23. 获取R中一组行的最大值
- 24. pmax(并行最大值)相当于R中的排名
- 25. R - 对列中的最大值进行排序和子设置
- 26. R:在每一列中找到每两行的最大值
- 27. 如何在R data.table中检索行为最大值的列?
- 28. 删除R中重复的两行
- 29. 需要获得列iOS中的最大重复值
- 30. 基于一个值删除R data.frames中的重复行
请你自己尝试它 – rawr