我有一個像下面這樣的資料框(雖然大得多)。
| 姓名 | 年齡 | 性別 | 最喜歡的顏色 | 年級 | 分數 |
|---|---|---|---|---|---|
| 蒂姆 | 不適用 | 不適用 | 藍色 | 12 | 100 |
| 蒂姆 | 18 | 男性 | 紅色的 | 12 | 50 |
| 戴夫 | 17 | 男性 | 紅色的 | 12 | 85 |
| 麥克風 | 15 | 男性 | 綠色 | 10 | 95 |
| 約翰 | 12 | 男性 | 不適用 | 7 | 80 |
| 約翰 | 12 | 不適用 | 橘子 | 7 | 90 |
有幾件事我想做。我的主要目標是按名稱變數合并行,以便每個名稱獲得一行。其次,在合并行時,我希望帶有資料的單元格覆寫 NA 的單元格(tim with ageand sex。第三,如果合并的行都具有文本值(例如 tim with favcolor),我想保留第一個。最后,對于在數字列( age、grade和)中都有值的行score,我希望新值是合并行的平均值。
如果遵循所有這些規則,資料框應該看起來像這樣。
| 姓名 | 年齡 | 性別 | 最喜歡的顏色 | 年級 | 分數 |
|---|---|---|---|---|---|
| 蒂姆 | 18 | 男性 | 藍色 | 12 | 75 |
| 戴夫 | 17 | 男性 | 紅色的 | 12 | 85 |
| 麥克風 | 15 | 男性 | 綠色 | 10 | 95 |
| 約翰 | 12 | 男性 | 橘子 | 7 | 85 |
有沒有一種簡單的方法可以做到這一點?我已經嘗試了大約 30 種不同的方法,但結果從來都不是我想要的。任何幫助將不勝感激。
uj5u.com熱心網友回復:
您可以group_by(name)并使用summarize將行折疊成單個行。
最后,relocate將列重新排序為輸入。
library(dplyr)
df %>%
group_by(name) %>%
summarize(across(where(is.numeric), ~ mean(.x, na.rm = T)),
across(where(is.character), ~.x[!is.na(.x)][1])) %>%
relocate(colnames(df))
# A tibble: 4 × 6
name age sex favcolor grade score
<chr> <dbl> <chr> <chr> <dbl> <dbl>
1 dave 17 male red 12 85
2 john 12 male orange 7 85
3 mike 15 male green 10 95
4 tim 18 male blue 12 75
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455782.html
上一篇:具有多索引列的反透視熊貓資料框
