我有一個資料集,其中列出了植物科 (col 1) 和每個科 (col 2) 中的植物物種數量。我想創建一個直方圖,以視覺上很好的方式顯示我的資料集中物種最豐富的家族。但是,由于資料集列出了數百個科,我想將包含少于 40 個物種的所有科濃縮為一行(命名為“其他”)。
我有這樣的事情:
| 家庭 | 物種_n |
|---|---|
| 桃金娘科 | 234 |
| 豆科 | 156 |
| 薔薇科 | 111 |
| 桑科 | 30 |
| 茜草科 | 24 |
| 禾本科 | 23 |
我需要獲得這樣的東西
| 家庭 | 物種_n |
|---|---|
| 桃金娘科 | 234 |
| 豆科 | 156 |
| 薔薇科 | 111 |
| 其他 | 77 |
有誰知道如何做到這一點?我嘗試了一些函式,如“Group_by”和“group_data”,但它們似乎沒有做我需要的。
謝謝!!
uj5u.com熱心網友回復:
您可以更改Familyif的值Species_n小于 40 和aggregate。
aggregate(Species_n~Family,
transform(df, Family = ifelse(Species_n <= 40, 'Other', Family)), sum)
# Family Species_n
#1 Fabaceae 156
#2 Myrtaceae 234
#3 Other 77
#4 Rosaceae 111
forcats 有一個功能可以做到這一點 fct_lump_min
library(dplyr)
library(forcats)
df %>%
group_by(Family = fct_lump_min(Family, 40, Species_n)) %>%
summarise(Species_n = sum(Species_n))
資料
df <- structure(list(Family = c("Myrtaceae", "Fabaceae", "Rosaceae",
"Moraceae", "Rubiaceae", "Poaceae"), Species_n = c(234L, 156L,
111L, 30L, 24L, 23L)), row.names = c(NA, -6L), class = "data.frame")
uj5u.com熱心網友回復:
我們可以用 case_when
library(dplyr)
df %>%
group_by(Family = case_when(Species_n <= 40 ~ 'Other',
TRUE ~ Family)) %>%
summarise(Species_n = sum(Species_n))
# A tibble: 4 × 2
Family Species_n
<chr> <int>
1 Fabaceae 156
2 Myrtaceae 234
3 Other 77
4 Rosaceae 111
資料
df <- structure(list(Family = c("Myrtaceae", "Fabaceae", "Rosaceae",
"Moraceae", "Rubiaceae", "Poaceae"), Species_n = c(234L, 156L,
111L, 30L, 24L, 23L)), row.names = c(NA, -6L), class = "data.frame")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338644.html
標籤:r
上一篇:如何從這些資料創建一個新列?
下一篇:計算資料框中每第二列的平均值
