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 withage
和sex
)。第三,如果要合并的行都具有文本值(例如 tim with favcolor
),我想保留第一个。最后,对于在数字列( age
、grade
和)中都有值的行score
,我希望新值是合并行的平均值。
如果遵循所有这些规则,数据框应该看起来像这样。
姓名 | 年龄 | 性别 | 最喜欢的颜色 | 年级 | 分数 |
---|---|---|---|---|---|
蒂姆 | 18 | 男性 | 蓝色的 | 12 | 75 |
戴夫 | 17 号 | 男性 | 红色的 | 12 | 85 |
麦克风 | 15 | 男性 | 绿色的 | 10 | 95 |
约翰 | 12 | 男性 | 橙子 | 7 | 85 |
有没有一种简单的方法可以实现这一点?我已经尝试了大约 30 种不同的方法,但结果从来都不是我想要的。任何帮助将不胜感激。
您可以group_by(name)
并使用summarize
将行折叠为一行。
最后,relocate
将列重新排序为输入。
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