如何合并具有相同标识符 R 的行?

mjo*_*joy 1 merge r tidy dplyr

我一直在寻找很多东西,但似乎找不到我正在寻找的答案。这些行最初被融合在一起,然后我将它们展开,现在我有一个与此类似的数据框: 在此输入图像描述

这是输出:

structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), 
    `first name` = c("Jamie", NA, NA, NA, NA, "sandra", NA, NA, 
    NA, NA), `last name` = c(NA, "Johns", NA, NA, NA, NA, NA, 
    "chan", NA, NA), q1_ans = c(NA, NA, "yes", NA, NA, NA, "yes", 
    NA, NA, NA), q2_ans = c(NA, NA, NA, "no", NA, NA, NA, NA, 
    "yes", NA), q3_ans = c(NA, NA, NA, NA, "yes", NA, NA, NA, 
    NA, "no")), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"), spec = structure(list(cols = list(ID = structure(list(), class = c("collector_integer", 
"collector")), `first name` = structure(list(), class = c("collector_character", 
"collector")), `last name` = structure(list(), class = c("collector_character", 
"collector")), q1_ans = structure(list(), class = c("collector_character", 
"collector")), q2_ans = structure(list(), class = c("collector_character", 
"collector")), q3_ans = structure(list(), class = c("collector_character", 
"collector"))), default = structure(list(), class = c("collector_guess", 
"collector"))), class = "col_spec"))
Run Code Online (Sandbox Code Playgroud)

我拥有的真实数据框有更多的行和更多的列。我想将它们组合起来,以便 ID 1 的所有内容都在一行上,ID 2 的所有内容都在一行上,依此类推。我已经尝试过,但它没有让我有任何进展

qr <- qr %>% 
  group_by(., ID) %>%
  rowwise() %>%
  summarise_all(funs(first(na.omit(.))))
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Error in summarise_impl(.data, dots) : 
  Column `first name` must be length 1 (a summary value), not 0
Run Code Online (Sandbox Code Playgroud)

我也尝试过 dcast 但这也没有帮助。谢谢!

akr*_*run 5

我们不需要rowwise. 按“ID”分组后,na.omitsummarise_all(假设每列的“ID”中只有一个非 NA 元素)使用

qr %>%
    group_by(ID) %>%
    summarise_all(na.omit)
# A tibble: 2 x 6
#     ID `first name` `last name` q1_ans q2_ans q3_ans
#  <int> <chr>        <chr>       <chr>  <chr>  <chr> 
#1     1 Jamie        Johns       yes    no     yes   
#2     2 sandra       chan        yes    yes    no    
Run Code Online (Sandbox Code Playgroud)

如果每个“ID”列有多个非 NA 元素,则通过连接所有非 NA 元素来创建一个字符串

qr %>%
    group_by(ID) %>%
    summarise_all(funs(toString(na.omit(.))))
Run Code Online (Sandbox Code Playgroud)

或创建一个list然后执行unnest

qr %>%
   group_by(ID) %>%
   summarise_all(funs(list(na.omit(.))))
Run Code Online (Sandbox Code Playgroud)