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

时间:2012-02-16 16:58:40

标签: r

我正在尝试将paste地址行连接到一个地址字符串。但是,有些行是空白的(""),这意味着会插入额外的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"

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

4 个答案:

答案 0 :(得分:7)

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

gsub('(, )+',', ',with(addr.df,paste(street1,street2,city,sep=", ")))

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

答案 1 :(得分:3)

它可以在一行中完成,没有regexing,但是你需要引入循环(在这种情况下通过apply)。

apply(
  addr.df, 
  1, 
  function(row) paste(row[nzchar(row)], collapse = ", ")
)

答案 2 :(得分:1)

streets <- ifelse(street2=="",street1,paste(street1,street2,sep=", "))

然后在整个数据框粘贴中使用streets代替street1street2

答案 3 :(得分:0)

我跳过正则表达式并使用一些简单的“if”条件来检查数据框中的元素数量。

保持这一点:你真的希望输出为
 22B, Baker, London而不是22B Baker, London(数字和街道之间没有逗号)?假设后者是所需的格式,只需要做  allstreet<-paste(street1,street2,sep=" ")

然后在withallstreet上运行您的city行 使用plyrmelt执行此操作可能有一种更为流畅的方式: - )