基于行中元素数量的粘贴

时间:2016-02-04 21:22:51

标签: r string concatenation

这是我的数据框

s <- data.frame(
  x = c("a","b","c"),
  y = c("d","e", NA),
  z = c(NA,"j",NA)
) 

我想根据条件连接(粘贴)值,我想用逗号粘贴非空值,所以我想要的结果是:

a,b,c
d,e
j 

也许这很简单,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:4)

由于不是GIS或空间分析相关,这个问题应该迁移到Stack Overflow,但同时也是如此。

s <- data.frame(
  x = c("a","b","c"),
  y = c("d","e", NA),
  z = c(NA,"j",NA)
) 

将逗号添加为单个向量或按列添加:

paste(sapply(strsplit(as.vector(na.omit(c(s[,1], s[,2], s[,3]))), ""), 
      paste, collapse=":"), collapse=", ")

sapply(as.list(s), function(x) {paste(na.omit(x), collapse=", ")})    

答案 1 :(得分:2)

另一种选择是

library(dplyr)
s %>% 
  summarise_each(funs(toString(na.omit(.)))) %>%
  unlist(., use.names=FALSE)
#[1] "a, b, c" "d, e"    "j"