[英]How to recode values to na in entire dataframe for only numeric values?
[英]Merging dataframe rows with text, numeric, and NA values
我有一個 dataframe,如下圖所示(雖然大得多)。
名稱 | 年齡 | 性別 | 最喜歡的顏色 | 年級 | 分數 |
---|---|---|---|---|---|
蒂姆 | 北美 | 北美 | 藍色的 | 12 | 100 |
蒂姆 | 18 | 男性 | 紅色的 | 12 | 50 |
戴夫 | 17 | 男性 | 紅色的 | 12 | 85 |
麥克風 | 15 | 男性 | 綠色 | 10 | 95 |
約翰 | 12 | 男性 | 北美 | 7 | 80 |
約翰 | 12 | 北美 | 橘子 | 7 | 90后 |
有幾件事我想做。 我的主要目標是通過 name 變量合並行,這樣每個名字都有一行。 其次,在合並行時,我希望包含數據的單元格覆蓋 NA 的單元格(tim with age
和sex
。第三,如果合並的行都有文本值(例如 tim with favcolor
),我想保留第一個. 最后,對於在數字列( age
、 grade
和score
)中都有值的行,我希望新值是合並行的平均值。
如果遵循所有這些規則,dataframe 應該看起來像這樣。
名稱 | 年齡 | 性別 | 最喜歡的顏色 | 年級 | 分數 |
---|---|---|---|---|---|
蒂姆 | 18 | 男性 | 藍色的 | 12 | 75 |
戴夫 | 17 | 男性 | 紅色的 | 12 | 85 |
麥克風 | 15 | 男性 | 綠色 | 10 | 95 |
約翰 | 12 | 男性 | 橘子 | 7 | 85 |
有沒有一種直接的方法可以做到這一點? 我已經嘗試了大約 30 種不同的東西,但結果從來沒有像我想要的那樣。 任何幫助將不勝感激。
您可以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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.