我在 R 中有一個超過 600k obs 的資料集。我創建了一個“key”變數,我想知道有多少不同的鍵出現與 ID 變數相關。我的資料集如下所示:
id <- c("58497484", "58544005", "74766653", "74764718", "62824455", "58497484", "58497484")
key <- c("5718368_09/06/1981_3_2014", "2077485_02/06/1977_8_2014", "2091585_23/10/1982_1_2014", "2077388_30/01/2000_11_2017", "2082225_02/07/1998_10_2017", "2077450_04/05/2001_1_2016", "2077477_03/03/1978_8_2017")
data <- as.data.frame(cbind(id, key))
因此,如您所見,id "58497484" 重復了 3 次,但顯示了 3 個不同的鍵。我想要的是在表中列出每個 id 及其各自的鍵,因此它看起來像這樣:
id key
58497484 5718368_09/06/1981_3_2014
2077450_04/05/2001_1_2016
2077477_03/03/1978_8_2017
58544005 2077485_02/06/1977_8_2014
74766653 2091585_23/10/1982_1_2014
74764718 2077388_30/01/2000_11_2017
62824455 2082225_02/07/1998_10_2017
任何想法我怎樣才能使這項作業?我已經使用這兩個變數嘗試過 dplyr 和 group_by,但是我沒有得到所需的輸出。
uj5u.com熱心網友回復:
我們可以先排列然后用空白單元格替換重復項:
library(dplyr)
data %>%
arrange(id) %>%
mutate(id = ifelse(duplicated(id), "", id))
id key
1 58497484 5718368_09/06/1981_3_2014
2 2077450_04/05/2001_1_2016
3 2077477_03/03/1978_8_2017
4 58544005 2077485_02/06/1977_8_2014
5 62824455 2082225_02/07/1998_10_2017
6 74764718 2077388_30/01/2000_11_2017
7 74766653 2091585_23/10/1982_1_2014
uj5u.com熱心網友回復:
這也是一個基本的 R 解決方案。
data <- data[order(id, as.integer(sub('.*(\\d{4}).*', '\\1', key))),]
data$id[duplicated(data$id) == TRUE] <- ""
# Reset row names/numbers.
rownames(data) <- NULL
輸出
id key
1 58497484 5718368_09/06/1981_3_2014
2 2077450_04/05/2001_1_2016
3 2077477_03/03/1978_8_2017
4 58544005 2077485_02/06/1977_8_2014
5 62824455 2082225_02/07/1998_10_2017
6 74764718 2077388_30/01/2000_11_2017
7 74766653 2091585_23/10/1982_1_2014
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368696.html
下一篇:如何將行合并到R中的列中?
