R paste:如果参数是空字符串,则忽略sep

Jam*_*mes 4 r

我正在尝试将paste地址行连接到单个地址字符串.但是,有些行是blank(""),这意味着sep会插入一个额外的行并使地址看起来很难看.例如:

addr.df <- data.frame(street1=c("22B","Windsor Castle"),street2=c("Baker Street",""),city=c("London","Windsor"))

with(addr.df,paste(street1,street2,city,sep=", "))
[1] "22B, Baker Street, London" "Windsor Castle, , Windsor"
Run Code Online (Sandbox Code Playgroud)

注意,第二个地址中的额外内容.有没有办法围绕这个不涉及一段regexp诱导的tourettes?

Jus*_*tin 7

我认为你不能避免一点点的正规化.

gsub('(, )+',', ',with(addr.df,paste(street1,street2,city,sep=", ")))
Run Code Online (Sandbox Code Playgroud)

(正则表达式说:用一个"逗号空间"替换多个"逗号空间")


Ric*_*ton 5

它可以在一行中完成,无需正则表达式,但您需要引入循环(在本例中通过 apply)。

apply(
  addr.df, 
  1, 
  function(row) paste(row[nzchar(row)], collapse = ", ")
)
Run Code Online (Sandbox Code Playgroud)