2016-02-14 84 views
0

我有以下数据库。 如何忽略空单元格并压缩成一行?摘要数据帧

M = data.frame(Name = c('name','name'), Col1 = c("",1) , Col2 = c(2,"")) 
M$Col1 <- as.character(M$Col1) 
M$Col2 <- as.character(M$Col2) 

谢谢

+2

尝试使用'aggregate(。〜Name,M,paste,collapse =“”)''。 – nicola

+0

@nicola谢谢,但我想在行上显示“名称”,“1”,“2” –

+0

@ nicola的建议给出了输出结果,请参阅我为它制作的社区wiki答案 – h3rm4n

回答

0

您可以使用合计功能解决你的问题。

aggregate(M[c("Col1","Col2")], list(M$Name), max, na.rm = TRUE) 
+0

非常感谢,但是有没有我可以聚合角色的方式? –

+0

使用* max *而不是* min *作为聚合的乐趣。你会得到所需的输出 –

0

这里是一个dplyr解决

library(dplyr) 
M %>% 
    group_by(Name) %>% 
    summarise(Col1 = paste0(Col1, collapse = ''), 
       Col2 = paste0(Col2, collapse = '')) 

##  Name Col1 Col2 
## (fctr) (chr) (chr) 
## 1 name  1  2 

这部作品根据输入数据,而不必在列转换为字符

M = data.frame(Name = c('name','name'), Col1 = c("",1) , Col2 = c(2,"")) 
1

由于@Nicola在评论中已经表示:

M2 <- aggregate(.~Name, M, paste, collapse="") 

正在给出所需的输出:

> M2 
    Name Col1 Col2 
1 name 1 2