r - 替换 NA 时合并组中的行

adl*_*adl 2 merge row r na dplyr

我试图找到这个问题的答案,但找不到。如果有答案,我会道歉并立即删除我的问题。

我正在尝试将几行合并为一行(此计算应该在组上单独完成,在这种情况下id可以使用变量进行分组),以便不留下 NA 值。

# initial dataframe
df_start <- data.frame(
  id = c("as", "as", "as", "as", "as", "bs", "bs", "bs", "bs", "bs"), 
  b = c(NA, NA, NA, NA, "A", NA, NA, 6, NA, NA), 
  c = c(2, NA, NA, NA, NA, 7, NA, NA, NA, NA), 
  d = c(NA, 4, NA, NA, NA, NA, 8, NA, NA, NA), 
  e = c(NA, NA, NA, 3, NA, NA, NA, NA, "B", NA), 
  f = c(NA, NA, 5, NA, NA, NA, NA, NA, NA, 10))

# desired output
df_end <- data.frame(id = c("as", "bs"), 
                     b = c("A", 6), 
                     c = c(2, 7), 
                     d = c(4, 8), 
                     e = c(3,"B"), 
                     f = c(5, 10))
Run Code Online (Sandbox Code Playgroud)

Jac*_*kes 5

无需删除问题,这可能对某些用户有帮助。这将每个组总结为每列的第一个非 NA 出现。

library(dplyr)

df_start <- data.frame(
  id = c("as", "as", "as", "as", "as", "bs", "bs", "bs", "bs", "bs"), 
  b = c(NA, NA, NA, NA, "A", NA, NA, 6, NA, NA), 
  c = c(2, NA, NA, NA, NA, 7, NA, NA, NA, NA), 
  d = c(NA, 4, NA, NA, NA, NA, 8, NA, NA, NA), 
  e = c(NA, NA, NA, 3, NA, NA, NA, NA, "B", NA), 
  f = c(NA, NA, 5, NA, NA, NA, NA, NA, NA, 10))

df_start %>% 
  group_by(id) %>% 
  summarise_all(list(~first(na.omit(.))))
Run Code Online (Sandbox Code Playgroud)

输出:

# A tibble: 2 x 6
  id    b         c     d e         f
  <fct> <fct> <dbl> <dbl> <fct> <dbl>
1 as    A        2.    4. 3        5.
2 bs    6        7.    8. B       10.
Run Code Online (Sandbox Code Playgroud)

当然,如果每列的每个组中出现多次某个值,您将会丢失一些数据。