合并/折疊一列中的值而不會重復保留 R 中另一列的 id
您好,我正在嘗試總結 R 中的一個大型資料框,我在下面對其進行了簡化:
site id sp
s1 A sp1,sp2,sp3,sp6
s1 A sp1,sp2,sp3,sp4,sp5
s1 A sp3,sp5,sp7
s2 B sp2,sp4
s2 B sp5,sp7
s3 C sp2,sp5
s3 C sp1,sp4
s3 C sp3,sp6
我希望每個site折疊列的非重復逗號分隔值都有一條記錄sp。預期結果是:
site id sp
s1 A sp1,sp2,sp3,sp4,sp5,sp6,sp7
s2 B sp2,sp4,sp5,sp7
s3 C sp1,sp2,sp3,sp4,sp5,sp6
最好(和最快)的方法是什么。非常感謝您提前
我嘗試使用group_by,但我不知道如何加入資料sp,然后只回傳唯一值。
uj5u.com熱心網友回復:
我們可以用 拆分sp列separate_rows,然后獲取distinct資料并按 'site'、'id' 和paste'sp' 值進行分組
library(dplyr)
library(tidyr)
library(stringr)
df1 %>%
separate_rows(sp) %>%
distinct %>%
group_by(site, id) %>%
summarise(sp = str_c(sort(sp), collapse = ","), .groups = 'drop')
-輸出
# A tibble: 3 × 3
site id sp
<chr> <chr> <chr>
1 s1 A sp1,sp2,sp3,sp4,sp5,sp6,sp7
2 s2 B sp2,sp4,sp5,sp7
3 s3 C sp1,sp2,sp3,sp4,sp5,sp6
資料
df1 <- structure(list(site = c("s1", "s1", "s1", "s2", "s2", "s3", "s3",
"s3"), id = c("A", "A", "A", "B", "B", "C", "C", "C"), sp = c("sp1,sp2,sp3,sp6",
"sp1,sp2,sp3,sp4,sp5", "sp3,sp5,sp7", "sp2,sp4", "sp5,sp7", "sp2,sp5",
"sp1,sp4", "sp3,sp6")), class = "data.frame",
row.names = c(NA,
-8L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521631.html
標籤:r通过...分组合并
上一篇:在R中,如何添加2,000個.txt檔案的內容來為每個檔案創建一個資料框?
下一篇:按縣合并遷入遷出資料
