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

时间:2018-05-11 13:41:08

标签: r merge dplyr row na

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

我正在尝试将多个行合并为一个(这个计算应该在组中单独进行,在这种情况下,变量IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'myTableName' AND COLUMN_NAME = 'ColumnA') BEGIN // your update and drop code goes here END 可以用于分组),这样就不会留下任何NA值。

id

2 个答案:

答案 0 :(得分:1)

无需删除问题,对某些用户可能会有所帮助。这会将每个组汇总到每列的第一个非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(funs(first(na.omit(.))))

输出:

# 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.

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

答案 1 :(得分:1)

希望这会有所帮助,使用dplyr

df_start <- sapply(df_start, as.character)
df_start[is.na(df_start)] <- " "
df_start <- as.data.frame(df_start)

library(dplyr)   
df_start %>% 
  group_by(id) %>% 
  summarise_all(funs(trimws(paste(., collapse = '')))) -> df