R 按组合并每行中具有不同NAs的行

R 按组合并每行中具有不同NAs的行,r,grouping,R,Grouping,我找不到这个问题的确切答案,所以我希望我没有重复一个问题 我有一个如下的数据帧 groupid col1 col2 col3 col4 1 0 n NA 2 1 NA NA 2 2 我试图用它来传达的是,有重复的ID,其中总信息分布在两行中,我希望将这些行合并,以将所有信息都放在一行中。我该怎么办 我尝试过使用group_by和paste,但最终导致数据更加混乱(例如,在col4中得到22而不是2)和

我找不到这个问题的确切答案,所以我希望我没有重复一个问题

我有一个如下的数据帧

groupid  col1  col2  col3  col4
   1      0     n     NA     2    
   1      NA    NA    2      2
我试图用它来传达的是,有重复的ID,其中总信息分布在两行中,我希望将这些行合并,以将所有信息都放在一行中。我该怎么办

我尝试过使用group_by和paste,但最终导致数据更加混乱(例如,在col4中得到22而不是2)和sum()不起作用,因为有些列是字符串,而那些不是分类变量,对它们求和会改变信息

在填写NAs时,是否可以折叠行并保持一致数据不变

编辑:

所需的输出如下:

groupid  col1  col2  col3  col4
   1      0     n     2     2

在这种情况下,您是否能够绘制所需的输出?将data.frame转换为另一种类型如.vector()、as.matrix()和分组/分解可能会有所帮助

更新: 为每列查找唯一的元素并省略NAs

df<-data.frame(groupid=c(1,1), col1=c(0,NA), col2=c('n', NA), col3=c(NA,2),  col4=c(2,2)) # your input
out<-data.frame(df[1,]) # where the output is stored, duplicate retaining 1 row
for(i in 1:ncol(df)) out[,i]<-na.omit(unique(df[,i]))
print(out)

这就是你想要的吗
zoo
+
dplyr
也请检查此处的

EDIT2

假设你有冲突,你想把它们都展示出来

df <- read.table(text="groupid  col1  col2  col3  col4
   1      0     n     NA     2    
                 1      1    NA    2      2",
                 header=TRUE,stringsAsFactors=FALSE)
 df
  groupid col1 col2 col3 col4
1       1    0    n   NA    2
2       1    1(#)<NA>    2    2(#)
df %>%
    group_by(groupid) %>%
    summarise_all(funs(toString(unique(na.omit(.)))))#unique for duplicated like col4
  groupid  col1  col2  col3  col4
    <int> <chr> <chr> <chr> <chr>
1       1  0, 1     n     2   2
df%
分组依据(组ID)%>%
总结所有(funs(toString(unique)(na.省略(.щщщ)))#对于类似col4的复制品来说是唯一的
groupid col1 col2 col3 col4
11 0,1 n 2 2

另一个使用just
dplyr
的选项是在可用时获取第一个非NA值。你能行

dd <- read.table(text="groupid  col1  col2  col3  col4
1      0     n     NA     2    
1      NA    NA    2      2", header=T)

dd %>% 
  group_by(groupid) %>% 
  summarise_all(~first(na.omit(.)))
dd%
分组依据(组ID)%>%
总结所有内容(~首先(不,省略())

这有帮助吗?或者,即使是这一个-哦,第二个链接可能会起作用,我会给它一个很可能的副本,但这并不能提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。-昨天我无权发表评论。这是我所能做的。有必要澄清这个问题,我所做的一切都是合乎道德的。然后你现在就做,删除这个答案。答案现在更新了,不需要删除它。正如我所说,评论是不可能的,为此道歉。
df %>% group_by(groupid) %>% summarise_all(funs(.[!is.na(.)][1]))
df <- read.table(text="groupid  col1  col2  col3  col4
   1      0     n     NA     2    
                 1      1    NA    2      2",
                 header=TRUE,stringsAsFactors=FALSE)
 df
  groupid col1 col2 col3 col4
1       1    0    n   NA    2
2       1    1(#)<NA>    2    2(#)
df %>%
    group_by(groupid) %>%
    summarise_all(funs(toString(unique(na.omit(.)))))#unique for duplicated like col4
  groupid  col1  col2  col3  col4
    <int> <chr> <chr> <chr> <chr>
1       1  0, 1     n     2   2
dd <- read.table(text="groupid  col1  col2  col3  col4
1      0     n     NA     2    
1      NA    NA    2      2", header=T)

dd %>% 
  group_by(groupid) %>% 
  summarise_all(~first(na.omit(.)))