将数据框行与文本、数字和 NA 值合并

lwe*_*lwe 1 merge r dataframe na

我有一个像下面这样的数据框(尽管更大)。

姓名 年龄 性别 最喜欢的颜色 年级 分数
蒂姆 不适用 不适用 蓝色的 12 100
蒂姆 18 男性 红色的 12 50
戴夫 17 号 男性 红色的 12 85
麦克风 15 男性 绿色的 10 95
约翰 12 男性 不适用 7 80
约翰 12 不适用 橙子 7 90

有几件事我想做。我的主要目标是按名称变量合并行,以便每个名称获得一行。其次,在合并行时,我希望包含数据的单元格覆盖 NA 的单元格(tim withagesex)。第三,如果要合并的行都具有文本值(例如 tim with favcolor),我想保留第一个。最后,对于在数字列( agegrade和)中都有值的行score,我希望新值是合并行的平均值。

如果遵循所有这些规则,数据框应该看起来像这样。

姓名 年龄 性别 最喜欢的颜色 年级 分数
蒂姆 18 男性 蓝色的 12 75
戴夫 17 号 男性 红色的 12 85
麦克风 15 男性 绿色的 10 95
约翰 12 男性 橙子 7 85

有没有一种简单的方法可以实现这一点?我已经尝试了大约 30 种不同的方法,但结果从来都不是我想要的。任何帮助将不胜感激。

ben*_*n23 5

您可以group_by(name)并使用summarize将行折叠为一行。

\n

最后,relocate将列重新排序为输入。

\n
library(dplyr)\n\ndf %>% \n  group_by(name) %>% \n  summarize(across(where(is.numeric), ~ mean(.x, na.rm = T)),\n            across(where(is.character), ~.x[!is.na(.x)][1])) %>% \n  relocate(colnames(df))\n\n# A tibble: 4 \xc3\x97 6\n  name    age sex   favcolor grade score\n  <chr> <dbl> <chr> <chr>    <dbl> <dbl>\n1 dave     17 male  red         12    85\n2 john     12 male  orange       7    85\n3 mike     15 male  green       10    95\n4 tim      18 male  blue        12    75\n
Run Code Online (Sandbox Code Playgroud)\n