我有一個數據集,包括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. 最大功能重複值
- 5. R中的列最大值
- 6. 在Excel中最大的條件語句重複的最大值
- 7. 取其中有一列的最大值的行 - 與重複
- 8. 顯示重複的最大值
- 9. 增加重複元素的最大值
- 10. R,因子的最大值
- 11. R:列和行索引與最大值
- 12. Oracle:重複組中的最小最大值
- 13. 比較R中的組中的最大值和最小值
- 14. DBMS_SCHEDULER重複區間最大值
- 15. mysql查詢最大重複值
- 16. 最長最大重複子
- 17. Oracle SQL - 刪除重複並保留具有最大值的行
- 18. 滾動最大值R
- 19. 頂部/最大值在R
- 20. R dplyr歷史最大值
- 21. 查找重複行,最大數據
- 22. R選擇重複的行
- 23. 行中的MySQL最大值
- 24. SQL,如何刪除重複行並找到最小值(timeIn)和最大值(timeOut)
- 25. R中重複值的序列
- 26. 與R中重複的x值繪製
- 27. 確定哪些值中的R重複
- 28. 最大值和最小值 - 前哨控制重複
- 29. 在R中使用data.table選擇重複組的最近行數
- 30. 爲R中的logi.hist.plot自定義最小值和最大值
請你自己嘗試它 – rawr