簡體   English   中英

將 dataframe 行與文本、數字和 NA 值合並

[英]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 agesex 。第三,如果合並的行都有文本值(例如 tim with favcolor ),我想保留第一個. 最后,對於在數字列( agegradescore )中都有值的行,我希望新值是合並行的平均值。

如果遵循所有這些規則,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM