折叠行,保持独特,删除重复,用分号分隔

时间:2017-02-04 16:50:07

标签: r

非常简单的问题,但我尝试了很多变化,但无法让我的数据框进行这一小改动。

启动数据框:

l = c("a", "b", "", "c","d") 
c = c("green", "blue", "black","red","") 
n = c(1,1,1,2,2) 
df = data.frame(n,c,l)

期望的输出:

l = c("a;b","c;d") 
c = c("green;blue;black","red") 
n = c(1,2) 
dff = data.frame(n,c,l)

一个非常相似的问题被问到here,这段代码完美无缺,我只是不能用分号来分隔它。

以下是代码:

#Combine Rows, delete dups, keep uniques, remove NAs
library(dplyr)
rm_na_unique <- function(vec){
  unique(vec[!is.na(vec)])
}

df <- df %>%
  group_by(n) %>% 
  summarise_each(funs(toString(rm_na_unique(.))))

我尝试在不同的地方插入下面的代码行,但它似乎不起作用。很抱歉这个简单的问题,但我可以尝试解决这个问题。有时这些小问题是最难解决的,当你还没有语法命令时。谢谢。

(paste(., collapse = ";"))) 

1 个答案:

答案 0 :(得分:2)

我们有空白("")而不是NA

df %>%
    group_by(n) %>%
    summarise_each(funs(paste(.[nzchar(as.character(.))], collapse=";")))
# A tibble: 2 × 3
#     n                c     l
#  <dbl>            <chr> <chr>
#1     1 green;blue;black   a;b
#2     2              red   c;d